更新
现在看来它只发生在我描述的第一种情况下,即重新加载“扩展”选项卡并打开一个新选项卡时。可能的错误?
我正在设置一个带有 background.js 页面和 content-script.js 的 chrome 扩展。
两者通过端口相互通信。它现在的工作方式是,每次激活或更新选项卡时,端口都会在后台初始化,内容脚本会通过 chrome.runtime.onConnect.addListener()
监听它。 (返回端口)。
这很好用。除了两种(类似的)情况:
- 当扩展程序在“工具”>“扩展程序”页面中重新加载并创建一个新选项卡时。li>
- 在 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/