- 更新日: 2015年1月21日
- Chrome Extension
chrome.runtime.sendMessageでメッセージ通信
chrome.runtime API を使うと、background page からデータを取得したり、イベントを listen してレスポンスを返したりできます。chrome extension(chrome拡張)の開発において、chrome.runtime.sendMessage() の API を使って、content scripts から background.js を通して runtime にイベントハンドラを登録する例です。
chrome.runtime.sendMessage()
content_script.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
chrome.runtime.sendMessage({ type: "hello", text: "Taka" }, function (response) { if (response) { alert(response); } } ); // => Hello, Taka chrome.runtime.sendMessage({ type: "night", text: "Mike" }, function (response) { if (response) { alert(response); } } ); // => Good night, Mike |
上記のように、任意の箇所で chrome.runtime.sendMessage() でメッセージを送信する(リクエストを送る)。この時、第一引数に、ハッシュ形式で送信するデータを指定、第二引数にコールバックを指定。第二引数のコールバックの引数(response)に、戻ったレスポンスの結果が入るので、content script 側で任意の処理を行う。ここでは、単に alert させてます。
chrome.runtime.onMessage.addListener()
続いて、background.js ではリクエストを待ち受けてイベントハンドラを addListener します。chrome.runtime.onMessage.addListener() を使う。
background.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
chrome.runtime.onMessage.addListener( function (request, sender, sendResponse) { switch (request.type) { case "hello": hello(request.text, sendResponse); break; case "night": night(request.text, sendResponse); break; default: console.log("Error: Unkown request.") console.log(request); } } ); function hello(name, callback) { callback("Hello, " + name); } function night(name, callback) { callback("Good night, " + name); } |
request.type に送られてきたリクエストの type が入っているので、それを switch 文で判定して addListener でイベントハンドラを登録。request.text にそれぞれ名前(Taka, Mike)が入っています。
実際には、イベントハンドラ(hello, night)は、background で行った処理による結果を callback に渡すようにする。JavaScript での非同期プログラミングは、コールバックを多用するので分けがわからなくなりやすいですが、ようやく面白くなってきました。
- – 参考リンク –
- chrome.runtime – Google Chrome
- chrome.runtime.sendMessage – Google Chrome
- chrome.runtime.onMessage – Google Chrome
- Chrome Extension の関連記事
- Chrome拡張・アプリをテストユーザー(テスター)にのみ公開する方法
- GoogleアナリティクスでChrome拡張のcontent_scriptsをアクセス解析する
- Chromeアプリや拡張機能のChromeウェブストアへの公開手順
- Chrome拡張をGoogle Analyticsで解析する方法まとめ
- chrome.storageでchrome extension用のデータを保存・取得
- Chrome Extensionでoptions_pageで設定したlocalStorageの値をcontent_scriptsから読み込む
- Google Chrome拡張機能(extension)のi18n国際化
Leave Your Message!