Chrome扩展程序可加载页面并注入代码

时间:2014-05-23 15:30:34

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

我正在尝试创建一个简单的扩展,它将加载一个给定的页面并在页面加载后注入代码。

我想出了以下内容,我是以正确的方式做到这一点的吗?

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"});
        }
    });

1 个答案:

答案 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后的某个时间"。