javascript - Chrome 消息传递。 Uncaught Error : Error connecting to extension

标签 javascript google-chrome google-chrome-extension

所以我对 Chrome 的消息传递非常陌生,我尝试使用它在页面的 DOM 被修改(使用一些注入(inject)的 js)时让我的后台页面收到警报。

我只是尝试进行单向通信,但如果我在扩展程序运行时打开选项卡上的控制台,它会告诉我“ Uncaught Error :连接到扩展程序 [我的扩展程序 id] 时出错。”

为了简单起见,我会说我的背景页面的background.js有这些代码行:

chrome.runtime.onMessage.addListener(
  function(){
    if (modified == "true") {
      alert("modified message recieved");
      fourth();
    }
  }
);

我的内容脚本是:

function subtreeModified(){
  chrome.runtime.sendMessage({modified: "true"});
  alert("modified message sent");
}

document.addEventListener("DOMSubtreeModified", subtreeModified, false);

我一直在对此进行测试,每当页面 DOM 被修改时,我都会收到一堆警告,提示“已发送修改的消息”,但没有提示“已收到修改的消息”。想法/提示?

最佳答案

您没有声明和使用发送到接收者的事件监听器的参数。您的修改参数将作为传递给回调的参数的属性发送。这就是您在使用代码时必须从中获取它的地方。另外,我在回调开始处添加了一个 console.log() ,以便您可以查看它是否被调用:

chrome.runtime.onMessage.addListener(function(message) {
    console.log("received message");
    if (message.modified == "true") {
        alert("modified message recieved");
        fourth();
    }
});

注意:传递 true 和 false 字符串有点奇怪。为什么不直接使用 bool 值呢?

关于javascript - Chrome 消息传递。 Uncaught Error : Error connecting to extension,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28199770/

相关文章:

来自函数内的 JavaScript console.log

JavaScript 只能在 Chrome 浏览器中运行,不能在 Firefox 中运行

javascript - 整个页面的源代码,包括 Chrome 扩展中的框架

javascript - Chrome 扩展程序中的 Firebase UI : signInSuccess never called

javascript - 选择并获取与页面上其他元素具有相同类的跨度的内容

javascript - document.getElementById() 对比。 getElementById() 方法

php - 将表单数据发布到另一个页面,然后再次发布

javascript - Chrome 扩展程序弹出窗口中未定义“$”

html - Google Chrome 多次执行 HTML Import (Polymer)

javascript - 删除 jstree 中的根节点会分离事件监听器