API WebExtensions,在浏览器和内容脚本之间进行通信

时间:2016-11-22 09:24:09

标签: javascript firefox firefox-webextensions

我试图从网页到扩展程序进行通信,反之亦然。

为此,我在这里查看了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时,扩展似乎永远不会接收到该事件,断点永远不会被触发。

是否可以在网页和扩展程序之间进行通信?或者还有另一个吗?

2 个答案:

答案 0 :(得分:1)

问题在于我的扩展。我将我的内容脚本声明为后台脚本。

所以,而不是写这个:

e = (HibernateException) e;

你必须像这样声明脚本:

"background": {
    "scripts": ["myscript.js"],
    "persistent": true
    },

答案 1 :(得分:0)

我遇到了类似的问题,而我遇到的问题是我正在调用

window.postMessage

在iframe中运行。我把它改成了

之后
top.window.postMessage

它开始工作了。