在后台脚本中,侦听新打开的标签

时间:2018-01-08 06:41:17

标签: javascript google-chrome-extension

在我的后台脚本中,或者除了内容脚本之外的任何地方,我正在尝试侦听活动标签或新打开的标签。

我有这个,但这显然是不正确的:

enter image description here

我要做的是将内容脚本注入活动选项卡。我不希望我的内容脚本针对每个选项卡/窗口运行,仅针对选择选项卡。

有谁知道如何为某些标签注入内容脚本?我无法弄清楚。我认为注入内容脚本的最佳方法是从后台脚本。

3 个答案:

答案 0 :(得分:1)

如果您想在已激活的标签(chrome.tabs.query)中运行代码:

chrome.tabs.query({active: true, currentWindow: true}, function(foundTabs) {
    const activeTabId = foundTabs[0].id;

    chrome.tabs.executeScript(activeTabId, {
      file: 'inject.js'
    }); 
})

如果您想将文件注入每个新激活的标签(chrome.tabs.onActivated):

chrome.tabs.onActivated.addListener(function(activeInfo) {
    chrome.tabs.executeScript(activeInfo.tabId, {
        file: 'inject.js'
    }); 
});

请务必检查是否已经注入了文件,以防止多次进样。

对于这两种情况,权限应包括tabs

答案 1 :(得分:0)

我们无法在内容脚本中访问某些chrome API,在这种情况下,在background.js中执行该代码并根据后台js的操作执行操作。如果你想在内容脚本中做一些动作,那么你需要使用发送消息进行通信

答案 2 :(得分:0)

我错过了:

 "webNavigation"
manifest.json中的

权限。添加该权限后,我现在有:

chrome.webNavigation.onDOMContentLoaded.addListener(function (details) {

    const tabId = details.tabId;

    chrome.tabs.executeScript(tabId, {
      file: 'inject.js'
    });

});

现在可行。