Chrome Extension ( manifest version 3 ) message passing
拡張機能読込方法は下記参照 ⇒ Chrome Extension: Load unpacked extension
Devtools起動方法は下記参照 ⇒ Chrome Extension: Inspect background script
拡張機能を読み込んだ後、
background.jsのDevtoolsのConsoleを開き、
https://chromedriver.chromium.org/downloads
などを適当に開き、
content-script.jsのDevtoolsのConsoleを開く。
※メッセージで送信可能なのは JSON ifiable object とのこと。
Simple one-time requests
background.js
console.log('Hello, I am background scripts'); // Simple one-time requests ( background.js => content-script ) const chromeTabsSendMessage = async () => { const tabs = await chrome.tabs.query({ url: ['http://*/*', 'https://*/*'] }); tabs.forEach((tab) => { chrome.tabs.sendMessage(tab.id, '[background.js => content-script] From tabs.sendMessage.'); }); }; // Simple one-time requests ( content-script => background.js ) chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { console.log(request); chromeTabsSendMessage(); });
content-script.js
console.log('Hello, I am content scripts'); // Simple one-time requests ( background.js => content-script ) chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { console.log(request); }); // Simple one-time requests ( content-script => background.js ) chrome.runtime.sendMessage('[content-script => background.js] From runtime.sendMessage.');
manifest.json
{ "manifest_version": 3, "name": "HelloConnect", "version": "1.0", "background": { "service_worker": "background.js" }, "content_scripts": [ { "matches": ["<all_urls>"], "js": ["content-script.js"] } ], "permissions": [ "tabs" ] }
Long-lived connections
background.js
console.log('Hello, I am background scripts'); // Long-lived connections ( background.js => content-script ) const chromeTabsConnectPortPostMessage = async () => { const tabs = await chrome.tabs.query({ url: ['http://*/*', 'https://*/*'] }); tabs.forEach((tab) => { const port = chrome.tabs.connect(tab.id); port.postMessage( '[background.js => content-script] From chrome.tabs.connect + port.postMessage.', ); port.onMessage.addListener((request) => { console.log(request); }); }); }; // Long-lived connections ( content-script => background.js ) chrome.runtime.onConnect.addListener((port) => { port.postMessage( '[background.js => content-script] From chrome.runtime.onConnect.addListener + port.postMessage.', ); port.onMessage.addListener((request) => { console.log(request); }); chromeTabsConnectPortPostMessage(); });
content-script.js
console.log('Hello, I am content scripts'); // Long-lived connections ( background.js => content-script ) chrome.runtime.onConnect.addListener((port) => { port.postMessage( '[content-script => background.js] From chrome.runtime.onConnect.addListener + port.postMessage.', ); port.onMessage.addListener((request) => { console.log(request); }); }); // Long-lived connections ( content-script => background.js ) const port = chrome.runtime.connect(); port.postMessage( '[content-script => background.js] From chrome.runtime.connect + port.postMessage.', ); port.onMessage.addListener((request) => { console.log(request); });
manifest.json
{ "manifest_version": 3, "name": "HelloConnect", "version": "1.0", "background": { "service_worker": "background.js" }, "content_scripts": [ { "matches": ["<all_urls>"], "js": ["content-script.js"] } ], "permissions": [ "tabs" ] }
Reference
Reference
https://yuki.world/how-to-develop-chrome-extension-basics/
https://qiita.com/komlabo/items/5b99d3598f6664621dae
https://qiita.com/sakaimo/items/416f36db1aa982d8d00c
https://qiita.com/suin/items/2b31079056f1356257cb
https://qiita.com/RyBB/items/32b2a7b879f21b3edefc
https://qiita.com/k7a/items/26d7a22233ecdf48fed8
https://www.satoshiiiblog.com/2022/05/07/
Link1
Chrome Extension
https://developer.chrome.com/docs/extensions/
https://developer.chrome.com/docs/extensions/mv3/getstarted/
https://developer.chrome.com/docs/extensions/mv3/getstarted/development-basics/#load-unpacked
https://developer.chrome.com/docs/extensions/mv3/manifest/
https://developer.chrome.com/docs/extensions/mv3/match_patterns/
https://developer.chrome.com/docs/extensions/mv3/tut_debugging/
https://developer.chrome.com/docs/extensions/mv3/tut_debugging/#debug_bg
https://developer.chrome.com/docs/extensions/mv3/tut_debugging/#debug_cs
Link2
Chrome Extension: Load unpacked extension
https://developer.chrome.com/docs/extensions/mv3/getstarted/development-basics/#load-unpacked
https://yuki.world/how-to-develop-chrome-extension-basics/#t_3_chromechrome
Chrome Extension: Inspect background script
https://developer.chrome.com/docs/extensions/mv3/tut_debugging/#debug_bg
https://www.tweeeety.blog/entry/2015/03/04/231354
Chrome Extension: Installing extensions via ChromeDriver
https://sites.google.com/chromium.org/driver/extensions
https://yuki.world/selenium-load-chrome-extension/#t_3
Link3
Chrome Extension: message passing
https://developer.chrome.com/docs/extensions/mv3/messaging/
https://developer.chrome.com/docs/extensions/mv3/messaging/#simple
https://developer.chrome.com/docs/extensions/mv3/messaging/#connect
Chrome Extension: chrome.runtime
https://developer.chrome.com/docs/extensions/reference/runtime/
https://developer.chrome.com/docs/extensions/reference/runtime/#method-sendMessage
https://developer.chrome.com/docs/extensions/reference/runtime/#event-onMessage
https://developer.chrome.com/docs/extensions/reference/runtime/#property-id
https://developer.chrome.com/docs/extensions/reference/runtime/#method-connect
https://developer.chrome.com/docs/extensions/reference/runtime/#event-onConnect
https://developer.chrome.com/docs/extensions/reference/runtime/#type-Port
https://developer.chrome.com/docs/extensions/reference/runtime/#event-Port-onMessage
https://developer.chrome.com/docs/extensions/reference/runtime/#property-Port-sender
https://developer.chrome.com/docs/extensions/reference/runtime/#method-Port-postMessage
Chrome Extension: chrome.tabs
https://developer.chrome.com/docs/extensions/reference/tabs/
https://developer.chrome.com/docs/extensions/reference/tabs/#method-query
https://developer.chrome.com/docs/extensions/reference/tabs/#method-sendMessage