【问题标题】:OnActivated is only working when new tab openedOnActivated 仅在打开新选项卡时有效
【发布时间】:2016-08-01 04:58:23
【问题描述】:

我正在尝试与刚刚切换到使用消息传递的选项卡的内容脚本进行通信。这是我在 background.js 脚本中的代码。

chrome.tabs.onActivated.addListener(function(activeInfo) {
    chrome.tabs.sendMessage(activeInfo.tabId, { greeting: "hello" }, function(response) {
        console.log(response.farewell);
    });
});

这是我的内容脚本中的代码:

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
    sendResponse({ farewell: "goodbye" });
    loadContent();
});

内容脚本是否不再在非活动选项卡中侦听,即使它切换回该选项卡?为什么这只在新打开的标签页中运行?

为了进一步说明我为什么要这样做,有时选项卡会在未重新加载的情况下保持打开状态,并且我的脚本已经执行。当使用弹出选项更改与脚本有关的信息时,我希望在选项卡更改时重新加载内容,并在不重新加载页面的情况下再次运行特定功能。因此,注入内容脚本并不理想,因为它已经被执行了。

【问题讨论】:

  • 至于“切换回那个选项卡”,是不是之前在那个选项卡中注入了内容脚本?我的意思是在你加载扩展之后,你有没有重新加载之前打开的标签以确保你的内容脚本被注入?
  • 你有一个有效的点。哈。我要回到带有旧版本内容脚本的选项卡。我不敢相信这是解决方案。谢谢你。除了可能是魔法之外,您是如何得出结论的?
  • here,这是一个经常被问到的问题,Xan 在文档中提到了这个技巧。

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


【解决方案1】:

试试这个:

background.js

        chrome.tabs.onActivated.addListener(function(activeInfo) {

            chrome.tabs.query({
                active: true,
                currentWindow: true
            }, function(tabs) {

                 chrome.tabs.sendMessage(activeInfo.tabId, 
                  { greeting: "hello" }, function(response) {
                    console.log(response.farewell);
               });
            });

        });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多