我正在尝试创建一个简单的扩展,它将加载一个给定的页面并在页面加载后注入代码。
我想出了以下内容,我是以正确的方式做到这一点的吗?
background.js
chrome.tabs.getCurrent(function (tab) {
chrome.tabs.update(tab.id, {url: "http://www.EXAMPLE.COM"});
});
chrome.tabs.onUpdated.addListener(function(tabId , info) {
if (info.status == "complete") {
chrome.tabs.executeScript(null, {file: "content_script.js"});
}
});
答案 0 :(得分:1)
为chrome.tabs.getCurrent
:
chrome.tabs
documentation
获取此脚本调用的选项卡。如果从非标签上下文调用(例如:背景页或弹出视图),则可能未定义。
要获取当前有效标签,您应该使用chrome.tabs.query
:
chrome.tabs.query({currentWindow: true, active: true}, function(tabs){
// Do something with tabs[0]
});
或者,如果您对用户输入作出反应,例如点击浏览器操作,则您已经提供了当前标签:
chrome.browserAction.onClicked.addListener(function(tab){
// "tab" is the current active tab
});
而不是抓住已经打开的标签,您可以简单地创建一个新标签(当然,取决于您正在尝试实现的标签):
chrome.tabs.create({url: "http://www.EXAMPLE.COM"});
当任何选项卡完成加载时,您的侦听器将尝试将内容脚本注入当前选项卡(您使用null
),而不仅仅是您创建的选项卡。从create
/ update
回调中这样做更安全,即
chrome.tabs.update(tab.id, {url: "http://www.EXAMPLE.COM"}, function(tab){
chrome.tabs.executeScript(tab.id, {file: "content_script.js"});
});
注意:您不必担心此时页面未完成加载。 executeScript
遵守run_at
parameter,默认为"在加载DOM后的某个时间"。