javascript – chrome.runtime.onConnect.addListener()不适用于初始chrome选项卡

UPDATE
现在看起来它只发生在我描述的第一种情况中,当重新加载Extensions选项卡并打开一个新选项卡时.可能的错误?

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

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

这很好用.除了两个(类似)案例:

>在工具>扩展页面中重新加载扩展程序并创建新选项卡.
>在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选项卡 - 代码日志