ãã©ãŠã¶æ¡åŒµæ©èœã®ã³ã³ãã³ãã¹ã¯ãªããã培åºè§£èª¬ãJavaScriptã®åé¢ãéä¿¡æŠç¥ãã»ãã¥ãªãã£ããããŠã°ããŒãã«éçºè åãã®ãã¹ããã©ã¯ãã£ã¹ãç¶²çŸ ããŸãã
ãã©ãŠã¶æ¡åŒµæ©èœã®ã³ã³ãã³ãã¹ã¯ãªããïŒJavaScriptã®åé¢ãšéä¿¡
ãã©ãŠã¶æ¡åŒµæ©èœã¯ããŠã§ããã©ãŠã¶ã®æ©èœã匷åãããŠãŒã¶ãŒã«ã«ã¹ã¿ãã€ãºãããäœéšãšå¹ççãªã¯ãŒã¯ãããŒãæäŸããŸããå€ãã®æ¡åŒµæ©èœã®äžå¿ã«ããã®ãã³ã³ãã³ãã¹ã¯ãªããã§ããããã¯ãDOMïŒããã¥ã¡ã³ããªããžã§ã¯ãã¢ãã«ïŒãšå¯Ÿè©±ããããã«ãŠã§ãããŒãžã«æ³šå ¥ãããJavaScriptãã¡ã€ã«ã§ãããããã®ã¹ã¯ãªãããã©ã®ããã«åäœããã®ããç¹ã«ãã¹ãããŒãžããã®åé¢ãšéä¿¡æ¹æ³ãçè§£ããããšã¯ãå ç¢ã§å®å šãªæ¡åŒµæ©èœãéçºããããã«äžå¯æ¬ ã§ãã
ã³ã³ãã³ãã¹ã¯ãªãããšã¯ïŒ
ã³ã³ãã³ãã¹ã¯ãªããã¯ãç¹å®ã®ãŠã§ãããŒãžã®ã³ã³ããã¹ãã§å®è¡ãããJavaScriptãã¡ã€ã«ã§ããããŒãžã®DOMã«ã¢ã¯ã»ã¹ã§ããããããã®ã³ã³ãã³ãã倿Žããããæ°ããèŠçŽ ã远å ãããããŠãŒã¶ãŒã®ã€ã³ã¿ã©ã¯ã·ã§ã³ã«å¿çãããããããšãå¯èœã§ããéåžžã®ãŠã§ãããŒãžã®ã¹ã¯ãªãããšã¯ç°ãªããã³ã³ãã³ãã¹ã¯ãªããã¯ãã©ãŠã¶æ¡åŒµæ©èœã®äžéšã§ãããéåžžã¯ãã©ãŠã¶æ¡åŒµæ©èœã®ãã¬ãŒã ã¯ãŒã¯ã«ãã£ãŠèªã¿èŸŒãŸããå®è¡ãããŸãã
å®çšçãªäŸãšããŠããŠã§ãããŒãžäžã®ç¹å®ã®ããŒã¯ãŒããèªåçã«ãã€ã©ã€ããããã©ãŠã¶æ¡åŒµæ©èœããããŸããã³ã³ãã³ãã¹ã¯ãªããã¯DOMå ã§ãããã®ããŒã¯ãŒããèå¥ãã匷調ããããã®ã¹ã¿ã€ã«ãé©çšããŸããå¥ã®äŸãšããŠã¯ããŠãŒã¶ãŒãéžæããèšèªã«åºã¥ããŠããŒãžäžã®ããã¹ãã翻蚳çã«çœ®ãæãã翻蚳æ¡åŒµæ©èœãæããããŸãããããã¯ç°¡åãªäŸã«éãããå¯èœæ§ã¯ã»ãŒç¡éã§ãã
JavaScriptã®åé¢ïŒãµã³ãããã¯ã¹
ã³ã³ãã³ãã¹ã¯ãªããã¯ããJavaScriptãµã³ãããã¯ã¹ããšããåŒã°ãããããçšåºŠåé¢ãããç°å¢ã§åäœããŸãããã®åé¢ã¯ãã»ãã¥ãªãã£ãšå®å®æ§ã®ããã«äžå¯æ¬ ã§ããããããªããã°ãã³ã³ãã³ãã¹ã¯ãªããããã¹ãããŒãžã®ã¹ã¯ãªããã«å¹²æžããããããŒãžã«æ³šå ¥ãããæªæã®ããã³ãŒãã«ãã£ãŠå±éºã«ããããããããå¯èœæ§ããããŸãã
åé¢ã®äž»ãªåŽé¢ïŒ
- 倿°ã¹ã³ãŒãïŒ ã³ã³ãã³ãã¹ã¯ãªãããšãŠã§ãããŒãžã®ã¹ã¯àž£àžŽããã¯ãå¥ã ã®ã°ããŒãã«ã¹ã³ãŒããæã¡ãŸããããã¯ãã³ã³ãã³ãã¹ã¯ãªããã§å®çŸ©ããã倿°ã颿°ããŠã§ãããŒãžã®ã¹ã¯ãªããããçŽæ¥ã¢ã¯ã»ã¹ã§ããããã®éãåæ§ã§ããããšãæå³ããŸããããã«ãããåœåã®è¡çªãæå³ããªã倿Žãé²ããŸãã
- ãããã¿ã€ãæ±æã®ç·©åïŒ ææ°ã®ãã©ãŠã¶ã¯ãæªæã®ããã¹ã¯ãªãããçµã¿èŸŒã¿JavaScriptãªããžã§ã¯ãïŒäŸïŒ`Object.prototype`ã`Array.prototype`ïŒã®ãããã¿ã€ãã倿ŽããŠè匱æ§ãæ³šå ¥ããããšãããããã¿ã€ãæ±ææ»æãç·©åããæè¡ãæ¡çšããŠããŸããã³ã³ãã³ãã¹ã¯ãªããã¯ãããã®ä¿è·ã®æ©æµãåããŸãããéçºè ã¯äŸç¶ãšããŠèŠæãæ ããªãããã«ããå¿ èŠããããŸãã
- Shadow DOMïŒãªãã·ã§ã³ïŒïŒ Shadow DOMã¯DOMããªãŒã®äžéšãã«ãã»ã«åããä»çµã¿ãæäŸããã·ã£ããŠã«ãŒãã®å€åŽã«ããã¹ã¿ã€ã«ãã¹ã¯ãªãããå éšã®èŠçŽ ã«åœ±é¿ãäžããããšããŸããã®éãé²ããŸããæ¡åŒµæ©èœã¯Shadow DOMãæŽ»çšããŠãUIèŠçŽ ããã¹ãããŒãžããããã«åé¢ããããšãã§ããŸãã
äŸïŒ `myVariable`ãšããååã®å€æ°ãå®çŸ©ããã³ã³ãã³ãã¹ã¯ãªãããèããŠã¿ãŸãããããŠã§ãããŒãžãåãååã®å€æ°ãå®çŸ©ããŠãããšããŠããç«¶åã¯çºçããŸãããå倿°ã¯ããããã®ã¹ã³ãŒãå ã«ååšããŸãã
éä¿¡ïŒã®ã£ãããåãã
åé¢ã¯éèŠã§ãããã³ã³ãã³ãã¹ã¯ãªããã¯ãããŒã¿ã®ä¿åãå€éšAPIãžã®ã¢ã¯ã»ã¹ãä»ã®ãã©ãŠã¶æ©èœãšã®é£æºãªã©ã®ã¿ã¹ã¯ãå®è¡ããããã«ãæ¡åŒµæ©èœã®ããã¯ã°ã©ãŠã³ãã¹ã¯ãªãããšéä¿¡ããå¿ èŠããã°ãã°ãããŸããã³ã³ãã³ãã¹ã¯ãªãããšããã¯ã°ã©ãŠã³ãã¹ã¯ãªããéã®éä¿¡ã確ç«ããããã®ããã€ãã®ã¡ã«ããºã ãååšããŸãã
ã¡ãã»ãŒãžããã·ã³ã°ïŒäž»èŠãªéä¿¡ãã£ãã«
ã¡ãã»ãŒãžããã·ã³ã°ã¯ãã³ã³ãã³ãã¹ã¯ãªãããšããã¯ã°ã©ãŠã³ãã¹ã¯ãªãããããŒã¿ãã³ãã³ãã亀æããããã®æãäžè¬çã§æšå¥šãããæ¹æ³ã§ãããã®ç®çã®ããã« `chrome.runtime.sendMessage` ããã³ `chrome.runtime.onMessage` APIïŒãŸãã¯ãããã®ãã©ãŠã¶åºæã®åçç©ïŒã䜿çšãããŸãã
ã¡ãã»ãŒãžããã·ã³ã°ã®ä»çµã¿ïŒ
- ã¡ãã»ãŒãžã®éä¿¡ïŒ ã³ã³ãã³ãã¹ã¯ãªãã㯠`chrome.runtime.sendMessage` ã䜿çšããŠããã¯ã°ã©ãŠã³ãã¹ã¯ãªããã«ã¡ãã»ãŒãžãéä¿¡ããŸããã¡ãã»ãŒãžã¯ãæååãæ°å€ãé åããªããžã§ã¯ããå«ãä»»æã®JavaScriptãªããžã§ã¯ãã«ããããšãã§ããŸãã
- ã¡ãã»ãŒãžã®åä¿¡ïŒ ããã¯ã°ã©ãŠã³ãã¹ã¯ãªãã㯠`chrome.runtime.onMessage` ã䜿çšããŠã¡ãã»ãŒãžããªãã¹ã³ããŸããã¡ãã»ãŒãžãå°çãããšãã³ãŒã«ããã¯é¢æ°ãå®è¡ãããŸãã
- ã¡ãã»ãŒãžãžã®å¿çïŒ ããã¯ã°ã©ãŠã³ãã¹ã¯ãªããã¯ãã³ãŒã«ããã¯ã«æäŸããã `sendResponse` 颿°ã䜿çšããŠããªãã·ã§ã³ã§ã³ã³ãã³ãã¹ã¯ãªããã«å¿çãè¿ãããšãã§ããŸãã
äŸïŒ
ã³ã³ãã³ãã¹ã¯ãªãã (content.js):
chrome.runtime.sendMessage({action: "getData"}, function(response) {
console.log("Data received: ", response);
// Process the received data
});
ããã¯ã°ã©ãŠã³ãã¹ã¯ãªãã (background.js):
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
if (request.action == "getData") {
// Fetch data from an API or local storage
let data = {value: "Some data from the background script"};
sendResponse(data);
}
return true; // Indicate that the response will be sent asynchronously
}
);
ãã®äŸã§ã¯ãã³ã³ãã³ãã¹ã¯ãªãããããã¯ã°ã©ãŠã³ãã¹ã¯ãªããã«ããŒã¿ãèŠæ±ããã¡ãã»ãŒãžãéä¿¡ããŸããããã¯ã°ã©ãŠã³ãã¹ã¯ãªããã¯ããŒã¿ãååŸãããããã³ã³ãã³ãã¹ã¯ãªããã«éãè¿ããŸãã`onMessage` ãªã¹ããŒå ã® `return true;` ã¯ãéåæã§å¿çãéä¿¡ããå Žåã«éåžžã«éèŠã§ãã
çŽæ¥çãªDOMã¢ã¯ã»ã¹ïŒäžè¬çã§ã¯ãªããæ³šæãå¿ èŠïŒ
ã¡ãã»ãŒãžããã·ã³ã°ãæšå¥šãããæ¹æ³ã§ãããã³ã³ãã³ãã¹ã¯ãªããããã¹ãããŒãžã®DOMã«çŽæ¥ã¢ã¯ã»ã¹ããã倿Žãããããå¿ èŠãããã·ããªãªãååšããŸãããã ãããã®ã¢ãããŒãã¯ç«¶åãã»ãã¥ãªãã£è匱æ§ã®å¯èœæ§ããããããæ³šæããŠäœ¿çšããå¿ èŠããããŸãã
çŽæ¥çãªDOMã¢ã¯ã»ã¹ã®ããã®ãã¯ããã¯ïŒ
- çŽæ¥çãªDOMæäœïŒ ã³ã³ãã³ãã¹ã¯ãªããã¯ãæšæºã®JavaScript DOMæäœã¡ãœããïŒäŸïŒ`document.getElementById`ã`document.createElement`ã`element.appendChild`ïŒã䜿çšããŠãããŒãžã®æ§é ãšã³ã³ãã³ãã倿Žã§ããŸãã
- ã€ãã³ããªã¹ããŒïŒ ã³ã³ãã³ãã¹ã¯ãªããã¯ãDOMèŠçŽ ã«ã€ãã³ããªã¹ããŒãã¢ã¿ããããŠããŠãŒã¶ãŒã®ã€ã³ã¿ã©ã¯ã·ã§ã³ããã®ä»ã®ã€ãã³ãã«å¿çã§ããŸãã
- ã¹ã¯ãªããã®æ³šå ¥ïŒ ã³ã³ãã³ãã¹ã¯ãªããã¯ãããŒãžã«`