LoginSignup
2
1

[Chrome拡張] Webページ(content scripts)からChrome拡張画面へメッセージを送る方法

Last updated at Posted at 2023-06-19

Webページ(content scripts)からChrome拡張画面(menu.html)へメッセージを
送る方法をご紹介します。(ManifestV3対応です)

新しく作成したchrome拡張を公開しました。
そこで使用した技術を備忘録として共有できればと思い、記事を書いています。
こちらがそのChrome拡張の記事です。ご興味があれば

こちらは別のChrome拡張の記事です。合わせてどうぞ

用意するファイル

root/
  ├ manifest.json
  ├ menu.html
  ├ js/
  │  ├ background.js
  │  ├ menu.js
  │  ├ script.js
  │  └ jquery-3.5.1.min.js
  └ img/
     ├ icon32.png
     └ icon48.png

menu.html

まずは、Chrome拡張メニューのアイコンをクリックした際に表示させるHTMLページを用意します。
今回は、「manifest.json」と同じ階層に「menu.html」、
「js」フォルダを用意して「jquery-3.5.1.min.js」と「menu.js」を用意しました。
div#send_inputに、Webページから送られてきたメッセージを表示します。

<!DOCTYPE HTML>
<html lang="ja">
  <head>
    <meta charset="utf-8" />
    <title>ページからのメッセージ送信テスト</title>
    <script src="js/jquery-3.5.1.min.js"></script>
    <script src="js/menu.js"></script>
  </head>
  <body>
    <div id="send_input" style="width:100%;"></div>
  </body>
</html>

menu.js

次に「menu.html」で行われた操作を処理する「menu.js」を「js」フォルダ以下に作成します。
webページから送られてきたメッセージをdiv#send_inputに表示します。

chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
  $("#send_input").append($("<div>"+request+"</div>"));
});

manifest.json

permissionsは不要です。
matchesは私が書いた記事を書き換えますのでhttps://qiita.com/doran/items/*を指定します。

{
  "name": "ページからのメッセージ送信テスト",
  "version": "1.00",
  "description": "ページからのメッセージ送信テスト",
  "permissions": [],
  "background": {
    "service_worker": "js/background.js"
  },
  "action": {
    "default_icon": {
      "32": "images/icon32.png"
    }
  },
  "icons": {
    "48": "images/icon48.png"
  },
  "content_scripts": [
    {
      "matches": ["https://qiita.com/doran/items/*"],
      "js": ["js/jquery-3.5.1.min.js","js/script.js"]
    }
  ],
  "manifest_version": 3
}

・background
  backgroundで実行されるjsを指定します。
・action
 ・default_icon
    ツールバーに表示されるアイコンを指定します。
・icons
  menu.htmlのファビコンを指定します。
・content_scripts
 ・matches
    content_scriptsを読み込むページのURLを指定します。
    この指定に当てはまらないURLの場合は、content_scriptsは読み込まれせん。
 ・js
   content_scriptsのソースと、そこで使用するjsを指定します。

background.js

Chromeブラウザのツールバーにあるアイコンがクリック時に「menu.html」を
新しいタブで開くためにbackgroundを用意します。

chrome.action.onClicked.addListener(function(){
  chrome.tabs.create({"url": "menu.html"});
});

script.js

content_scriptsのmatchesで指定したアドレスと一致するページで実行されるJS。
記事のタイトル部分をクリックしたら、Chrome拡張画面(menu.html)へ記事のタイトルをメッセージで送信します。

$(document).on("click",".p-items_main h1",function(){
 	chrome.runtime.sendMessage($(this).text());
});

実行結果

1.https://qiita.com/doran/items/から続くURLの記事を2つほど開いておきます。

2.記事のタイトル部分をクリックします。

3.Chrome拡張画面(menu.html)へメッセージ(記事のタイトル)が飛びました。

4.もう1個開いて、記事のタイトル部分をクリックします。

5.Chrome拡張画面(menu.html)へメッセージ(記事のタイトル)が飛びました。

おしまい。。。

その他のChrome拡張の実装方法

以下はこれまでに投稿したChrome拡張の記事です。用途に応じてご覧ください。
[Chrome拡張] ツールバーのアイコンをクリックしてHTMLページを表示する方法
[Chrome拡張] Chrome拡張メニューからページを操作する方法
[Chrome拡張] Webページ(content scripts)からChrome拡張画面へメッセージを送る方法
[Chrome拡張] Chrome拡張画面でタイマー(定期実行処理)を使用する方法
[Chrome拡張] Content Scriptsでタイマー(定期実行処理)を使用する方法
[Chrome拡張] Chrome拡張メニューからWebページを操作する方法
[Chrome拡張] Chrome拡張メニューからWebページを操作する方法(jQueryを使う)
[Chrome拡張] Chrome拡張メニューとWebページでやりとりする方法
[Chrome拡張] Chrome拡張メニューとWebページでやりとりする方法(Content Scriptsを使う)
[Chrome拡張] Chrome拡張メニューから開いていないWebページの情報を取得する方法
[Chrome拡張] ポップアップメニューを表示する方法
[Chrome拡張] ポップアップメニューからWebページを操作する方法
[Chrome拡張] ポップアップメニューからWebページを操作する方法(jQueryを使う)
[Chrome拡張] ポップアップメニューからWebページを操作する方法(スタイル変更)
[Chrome拡張] ストレージ(chrome.storage.local)を利用する方法
[Chrome拡張] オプションページを表示する方法

2
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1