アドオンにあるHTMLページにアドオン(webextension)からのメッセージを送信しようとしています。 webextension APIは、Chromeブラウザと互換性のあるChromeインターフェイスを使用しています。私はFirefox 48ベータ版を使用しています。アドオンページにメッセージが表示されないのはなぜですか?
これは、バックグラウンドスクリプト(「開始ページ」のメッセージが重要である)である:アドオンモジュール「easy_options」からメッセージを受信したとき、それはそのeasy_options.htmlニーズを意味し、そう
chrome.runtime.onMessage.addListener(
function(package, sender
){
switch (package.message){
case "open":
if (package.subject == "tab")
{
win = myNamespace.tabs[package.module];
result = win ? false : true;
if (result)
chrome.tabs.create(
{"url": package.url },
function(tab) {
if (chrome.extension.lastError)
console.log(chrome.extension.lastError);
else
myNamespace.tabs[package.module] = tab.id;
chrome.tabs.onRemoved.addListener(
function(tabId, removeInfo)
{
for (var k in myNamespace.tabs)
{
if (tabId === myNamespace.tabs[k])
{
myNamespace.tabs[k] = null;
break;
}
}
}
);
}
);
}
break;
case "initiate-page":
if (package.subject == "html-add-listeners")
{
switch(package.module){
case "easy_options":
case "advanced_options":
case "images_options":
chrome.tabs.sendMessage(
package.sender.id,
{ message:"initiate-page-response",
subject:"accept-namespace",
recepient: {id: package.sender.id },
module: package.module,
namespace: myNamespace,
info: "response to tab exists message"
}
)
break;
}
}
break;
}
}
)
ドキュメントにロードするデータがあります。したがって、データを含む名前空間のメッセージを送信します。今
アドオンページeasy_options.js(chrome.runtime.onMessageリスナーが追加された場合、再び、第二部は重要です): はchrome.tabs.query(
{ active: true, currentWindow: true},
function(tabs) {
browser.runtime.sendMessage(
{ message:"initiate-page",
subject: "html-add-listeners",
module: "easy_options",
sender:{id:tabs[0].id}
}
)
}
);
chrome.runtime.onMessage.addListener(
function(package, sender
){
switch (package.message){
case "initiate-page-response":
if (package.subject == "accept-namespace")
{
switch(package.module){
case "easy_options":
document.addEventListener('DOMContentLoaded', myNamespace.easy.restore);
document.getElementById("easy_form_save").addEventListener("submit", myNamespace.easy.save);
document.getElementById("easy_form_restore").addEventListener("submit", myNamespace.easy.restore);
document.getElementById("easy_form_remove_item").addEventListener("submit", myNamespace.easy.remove_profiles);
document.getElementById("easy_form_remove_profiles").addEventListener("submit", myNamespace.easy.remove_profiles);
document.getElementById("list").addEventListener("change", myNamespace.easy.restoreDefault);
break;
}
}
break;
}
}
)
何が起こることです:私は、メッセージを送信 1.(A) (B) 3. addons optionsスクリプトは、runtime.OnMessageリスナーの最初のメッセージ(A)を受信します(このメッセージを処理したくありません)。
何が起こるべきですか 1.私はメッセージを送ります(B) 3. addons optionsスクリプトは、runtime.OnMessageリスナーの最初のメッセージ(A)を受け取ります(このメッセージを処理したくありません) ) 4. addons optionsスクリプトは、runtime.OnMessageリスナーで2番目のメッセージ(B)を受け取る必要があります。処理する必要があります。
質問: 4番目の手順はなぜ行われませんか?メッセージ(Bエイリアスの "initiate-page-response")が受信されないのはなぜですか?
多分Chromeアドオンプログラマーが助けてくれるかもしれませんが、私は同じように動作するはずです。
クイックの質問は、なぜあなたもやっているこのメッセージング往復? – Xan