javascript - chrome.runtime.onConnect.addListener() 在初始 chrome 选项卡上不起作用

标签 javascript google-chrome google-chrome-extension

更新
现在看来它只发生在我描述的第一种情况下,即重新加载“扩展”选项卡并打开一个新选项卡时。可能的错误?


我正在设置一个带有 background.js 页面和 content-script.js 的 chrome 扩展。

两者通过端口相互通信。它现在的工作方式是,每次激活或更新选项卡时,端口都会在后台初始化,内容脚本会通过 chrome.runtime.onConnect.addListener() 监听它。 (返回端口)。

这很好用。除了两种(类似的)情况:

  1. 当扩展程序在“工具”>“扩展程序”页面中重新加载并创建一个新选项卡时。
  2. 在 Chrome 关闭并重新启动后的新标签页上。

我有一些日志显示,在这些情况下,background.js 确实初始化了端口...但是内容脚本由于某种原因没有接收到它。

这些是我正在做的事情的基础:

background.js

// When a tab gets activated
chrome.tabs.onActivated.addListener(function(tab) {
    port = chrome.tabs.connect(tab.tabId, { name: "fh-ext-messenger" });
    console.log(port)
    initPortListener(port);
});

// When a tab is updated
chrome.tabs.onUpdated.addListener(function(tab) {
    port = chrome.tabs.connect(tab, { name: "fh-ext-messenger" });
    console.log(port)
    initPortListener(port);
});

content.js

chrome.runtime.onConnect.addListener(function(port) {
    console.log(port);
    // ...
}

关于为什么这在初始选项卡上不起作用的任何想法?

最佳答案

内容脚本始终附加到您的扩展。任何时候您的扩展程序重新加载或停用时,该内容脚本都会从它处于事件状态的所有选项卡中删除。

重新加载扩展不会使其再次激活,您需要重新加载该特定选项卡。

我还注意到,重新加载扩展页面会重新加载所有 扩展,并且应该解释为什么您之前处于事件状态的内容脚本不再处于事件状态。

关于javascript - chrome.runtime.onConnect.addListener() 在初始 chrome 选项卡上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20385566/

相关文章:

google-chrome - WebGL2 支持的显卡

html - 使用媒体查询隐藏表格单元格会在 Chrome 中导致意外结果,但如果您重新加载页面就可以了

google-chrome-extension - 为什么我的内容脚本文件作为空文件加载?

javascript - AngularJS - 将数组值绑定(bind)到输入 ngModel

javascript - 如何自动(每天)更新javascript/ruby​​变量?

javascript - 强制网页的所有打开实例在 Google Chrome 网络应用程序中刷新

javascript - google-chrome 扩展程序中的垃圾收集

html - 如何保存 Chrome 开发者工具样式面板的 CSS 更改?

javascript - 使用 CSS 的银河结构

JavaScript 缩放文本以适应固定的 Div