
対象読者
- 拡張機能について知りたい
- バックグランドページでのデータ送受信方法について知りたい
書いてること
- 送れるデータのタイプ
- ページアクション→バックグランドへのデータ送信
- バックグランド→ページアクションへのデータ送信
データの送受信は
Message Passing(メッセージパッシング)
という仕組みを使います。
ただし、こちらは単一送信。送ったら送りっぱなしです。
送ったらその結果を受け取る、、のうような相互送受信を行いたい場合はチャンネルが便利です。別の記事も書きましたのでそちらも参照に。

使えるデータ
メッセージパッシングでの送受信にはJSON形式を用い、
使えるデータの型は以下です
- null
- boolean
- number
- string
- array
- object
動作上は特に面白くはないですが、アラートが表示されるだけです。
動きで的には、
- ブラウザアクションページ(myscript.js)から「AAAAAA」のメッセージを送る
- バックグランドページ(background.js)が「AAAAAA」のメッセージを受け取る
- コールバックでブラウザアクションページにメッセージを戻し、アラート表示する

マニフェストファイル
{
"manifest_version":2,
"name":"Chrome ex page action",
"version":"1",
"permissions":["declarativeContent"],
"background": {
"scripts": ["background.js"],
"persistent": false
},
"permissions": [
"contextMenus",
"tabs"
],
"browser_action": {
"default_popup": "popup.html",
"default_title": "Helloを表示"
}
}
backgroundとbrowser_actionについては別記事について記載しています。


JavaScriptファイル
chrome.runtime.sendMessage({
message: "AAAAAA"
}, function(response) {
alert(response);
});
sendMessage
このメソッドで、メッセージを送信します。
キー:バリューの形で送ります。
この場合は、キー:message、バリュー:”AAAAAA”。
backgoroud.jsからコールバック関数呼び出し、アラートを表示しています。
chrome.runtime.onMessage.addListener(
function(request, sender, callback) {
callback(request.message);
return true;
}
);
addListener
このメソッドで、メッセージを受信します。
requestに、送られたメッセージが
callbackで値を結果を返せます。
ここでは、callbackでmyscript.jsに返却。
request.messageの中に「AAAAAA」が入ってますので、それをそのまま返却してます。
HTMLファイル
<!DOCTYPE html>
<meta charset="UTF-8" />
<html>
<head>
<title></title>
<script type="text/javascript" src="myscript.js"></script>
</head>
<body>
<p id="hello">Hello!</p>
</body>
</html>

ブラウザアクション→バックグランドページへのメッセージ送信方法でした。
ソースコードはこちら
https://github.com/satoNobu/chrome_ex/tree/meg_fore_back
バックグランドページ→ブラウザアクションへの送信はこちらの記事を参照してください

単一の送信ではなく、相互にメッセージのやり取りを行いたい場合は、チャンネルを使う方法もあります。

他の拡張機能についてはこちらを参照してください
