我試圖從網頁與擴展進行通信,反之亦然。API Web擴展,在瀏覽器和內容腳本之間進行通信
要做到這一點,我看着Mozilla的文檔在這裏:https://developer.mozilla.org/fr/Add-ons/WebExtensions/Content_scripts#Communicating_with_the_web_page
而且它有一個簡單的例子,但我不能使它發揮作用。在網頁的腳本,我有這樣的:
// page-script.js
var messenger = document.getElementById("from-page-script");
messenger.addEventListener("click", messageContentScript);
function messageContentScript() {
window.postMessage({
direction: "from-page-script",
message: "Message from the page"
}, "*");
在內容腳本頁面的擴展:
// content-script.js
window.addEventListener("message", function(event) {
if (event.source == window &&
event.data.direction &&
event.data.direction == "from-page-script") {
alert("Content script received message: \"" + event.data.message + "\"");
}
});
我安裝的擴展(作爲一個暫時的,我上傳了我的XPI文件)然後我使用API WebExtensions的「調試」方法,並將一個斷點放入偵聽器,但每當我調用PostMessage時,該擴展都不會接收事件,斷點從不觸發。
這樣可以在網頁和擴展之間進行通信嗎?還是有另一個?
請編輯問題爲題目:包括一個**完整的** [mcve],重複的問題。包括一個* manifest.json *,一些背景*和*內容腳本。尋求調試幫助的問題(「**爲什麼不是這個代碼工作?」)必須包括:►期望的行爲,►特定問題或錯誤*和*►在問題中重現問題所需的最短代碼**本身**。沒有明確問題陳述的問題對其他讀者無益。請參閱:「**如何創建[mcve] **」,[我可以在此處詢問哪些主題?](http://stackoverflow.com/help/on-topic)和[問]。 – Makyen
您的代碼適用於我的環境。有幾件事你可以檢查:嘗試使用解壓擴展而不是xpi,檢查兩個腳本是否加載。嘗試從頁面控制檯運行'messageContentScript()'。 –
非常感謝Anatoly Sazanov,我明白了。當我將Chrome擴展程序改編爲Firefox擴展程序時,我使用了後臺腳本。我沒有看到它,但清單聲明我的內容腳本爲後臺腳本,因此是錯誤。 – Thordax