【发布时间】:2018-01-08 06:41:16
【问题描述】:
在我的后台脚本或除内容脚本之外的任何地方,我正在尝试侦听活动选项卡或新打开的选项卡。
我有这个,但这显然是不正确的:
我要做的是将内容脚本注入活动选项卡。我不希望我的内容脚本针对每个选项卡/窗口运行,只针对选定的选项卡。
有谁知道如何为某些选项卡注入内容脚本?我想不通。我认为注入内容脚本的最佳方式是从后台脚本中。
【问题讨论】:
标签: javascript google-chrome-extension
在我的后台脚本或除内容脚本之外的任何地方,我正在尝试侦听活动选项卡或新打开的选项卡。
我有这个,但这显然是不正确的:
我要做的是将内容脚本注入活动选项卡。我不希望我的内容脚本针对每个选项卡/窗口运行,只针对选定的选项卡。
有谁知道如何为某些选项卡注入内容脚本?我想不通。我认为注入内容脚本的最佳方式是从后台脚本中。
【问题讨论】:
标签: javascript google-chrome-extension
如果您想在已激活的选项卡 (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。
【讨论】:
onActivated API 记录在案?我以前没见过
我错过了:
"webNavigation"
manifest.json 中的权限。添加该权限后,我现在拥有:
chrome.webNavigation.onDOMContentLoaded.addListener(function (details) {
const tabId = details.tabId;
chrome.tabs.executeScript(tabId, {
file: 'inject.js'
});
});
现在可以了。
【讨论】:
在这种情况下,我们无法在内容脚本中访问的某些 chrome API 在 background.js 中执行该代码并从后台 js 执行相应的操作。如果您想在内容脚本中执行某些操作,则需要使用发送消息进行通信
【讨论】: