Chrome 拡張機能で background scripts から content scripts にメッセージを送信する
はじめに
Chrome 拡張機能を React などで構成された SPA で動作させる方法 で、background から JS を注入する方法を整理した。が、別要件で上手くいかないケースがあったのでメッセージドリブンで処理タイミングを通知する方法を整理した。
TL;DR
- content:
chrome.runtime.onMessage.addListener
を使ってメッセージを待つ - background:
chrome.tabs.sendMessage
を使ってメッセージを送るchrome.tabs.onUpdated.addListener
でタブの更新の検出や URL の絞り込みを行う
目次
環境・条件
- Chrome バージョン: 78.0.3904.70(Official Build) (64 ビット)
詳細
Content Scripts 側では chrome.runtime.onMessage.addListener
でメッセージを待ち受けて、Background Scripts 側では chrome.tabs.sendMessage
を使ってメッセージを送信する。
※Chrome 拡張機能を React などで構成された SPA で動作させる方法 で書いた、chrome.tabs.onUpdated.addListener
を組み合わせて使っている。
content script
content.js
。受信した message.type
で表示する内容を変更するだけ。
1 | (function() { |
background script
background.js
。Google 検索の読み込みが完了したら、type = "hoge"
のメッセージを送るだけ。
1 | chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) { |
まとめ
- content:
chrome.runtime.onMessage.addListener
を使ってメッセージを待つ - background:
chrome.tabs.sendMessage
を使ってメッセージを送るchrome.tabs.onUpdated.addListener
でタブの更新の検出や URL の絞り込みを行う
参考文献
- Chrome extension: sendMessage from background to content script doesn’t work - Stack Overflow
- JavaScript - WebExtensionsのtabs.sendMessageが動かない|teratail
- Chrome Extensionでcontent scriptとメッセージパッシングを実装するときの覚書 - Pastalablog in はてな
- chrome拡張機能 > background.jsからcontentscript.jsにメッセージを送る方法 · For myself tomorrow
関連記事
- Chrome 拡張機能で CSV ファイルを生成してダウンロードする方法
- Vue.js を使ってメインページ側で動作する Chrome 拡張機能を開発する方法
- vue-web-extension を使って Chrome 拡張機能を開発する方法
- Chrome 拡張機能を React などで構成された SPA で動作させる方法
- webpack & Babel を使って Chrome 拡張機能を開発するためのテンプレート(Hot Reload 付き)
- jQuery Select2 で、初期値の設定と選択状態のクリア
- JavaScript で URL のクエリパラメータを操作する方法
- axios で添付ファイルありのリクエスト(multipart/form-data の POST)