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