Chrome Extension の Messaging 機能でハマったのでメモ
content ▶ event page の方向で送る場合は、tab id が不要
// content script
function send() {
chrome.runtime.sendMessage({ message: "hello" }, function(response) {
console.log("content script got a response" + response.message);
});
}
// event page
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
sendResponse({ message: "world" });
});
これで、メッセージが届く。メッセージは クローン可能なものならなんでも良く、文字列やJSONが渡せる
event page ▶ content の方向でメッセージを送る場合は、tab id が必要になる。
間違えて、event page からの送信で chrome.runtime.sendMessage
を使うと Could not establish connection. Receiving end does not exist
で叱られる
// even page
function send(tabid) {
chrome.tabs.sendMessage(tab.id, "hello", function(response) {
if (chrome.runtime.lastError) {
alert("chrome.runtime.lastError" + chrome.runtime.lastError.message);
}
console.log("event page got a response" + response); // console.log は出ないので…
alert("event page got a response" + response); // alert で確認
});
}
chrome.contextMenus.onClicked.addListener(function(info, tab) {
send(tab.id);
});
// content script
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
console.log("content script got a message" + request);
sendResponse("world");
});