更新
现在看起来它只发生在我描述的第一种情况中,当重新加载Extensions选项卡并打开一个新选项卡时。可能的错误?
我正在设置带有background.js页面和content-script.js的chrome扩展程序。
两者通过端口相互通信。它现在的工作方式是,每次激活或更新选项卡时,端口都会在后台初始化,内容脚本通过chrome.runtime.onConnect.addListener()
(返回端口)监听它。
这很好用。除了两个(类似)案例外:
我有一些日志显示在这些情况下,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);
// ...
}
关于为什么这不适用于初始标签的任何想法?
答案 0 :(得分:1)
内容脚本始终附加到您的扩展程序。无论何时重新加载或停用扩展程序,内容脚本都将从其处于活动状态的所有选项卡中删除。
重新加载扩展程序不会再次激活您需要重新加载该特定选项卡。
我还注意到,重新加载扩展程序页面会重新加载所有扩展程序,并解释为什么以前的活动内容脚本不再处于活动状态。