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

时间:2013-12-04 20:47:17

标签: javascript google-chrome google-chrome-extension

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


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

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

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

  1. 在工具>扩展程序页面中重新加载扩展程序并创建新标签页时。
  2. 关闭并重新启动Chrome后,在新标签页上。
  3. 我有一些日志显示在这些情况下,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);
        // ...
    }
    

    关于为什么这不适用于初始标签的任何想法?

1 个答案:

答案 0 :(得分:1)

内容脚本始终附加到您的扩展程序。无论何时重新加载或停用扩展程序,内容脚本都将从其处于活动状态的所有选项卡中删除。

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

我还注意到,重新加载扩展程序页面会重新加载所有扩展程序,并解释为什么以前的活动内容脚本不再处于活动状态。