在我的后台脚本中,或者除了内容脚本之外的任何地方,我正在尝试侦听活动标签或新打开的标签。
我有这个,但这显然是不正确的:
我要做的是将内容脚本注入活动选项卡。我不希望我的内容脚本针对每个选项卡/窗口运行,仅针对选择选项卡。
有谁知道如何为某些标签注入内容脚本?我无法弄清楚。我认为注入内容脚本的最佳方法是从后台脚本。
答案 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'
});
});
现在可行。