在单个选项卡的范围内运行内容脚本

时间:2013-09-18 15:56:35

标签: google-chrome-extension

我正在为Google Chrome开发扩展程序。我为我的扩展程序创建了一个图标。我想做的是以下内容:

  1. 用户点击扩展程序的图标。
  2. 打开一个新标签页。
  3. 内容脚本按清单文件中的设置运行,但仅限于此 标签。
  4. 我认为很清楚,但是例如:假设我在清单文件中设置了以下属性:

    "content_scripts" : [
        {
            "matches" : ["http://stackoverflow.com"],
            "js" : ["script.js"]
        }
    ]
    

    让我们说我有两个标签:第一个是手动打开的,第二个是通过点击扩展名的图标打开的。现在,我在两个选项卡中打开stackoverflow的索引页面。在第一个选项卡中没有任何反应,但在第二个选项卡中运行“script.js”脚本。 我怎样才能实现它?我知道我可以实现tab的id检查,但是没有更简单的方法来实现它吗?

1 个答案:

答案 0 :(得分:2)

在这种情况下,您不应该使用清单中的content_scripts条目。您可以使用chrome.tabs.executeScript调用来运行内容脚本。您需要跟踪您创建的标签,但这并不难。

你可以在后台脚本中使用这样的东西:

var createdTabs = {};

chrome.browserAction.onClicked.addListener(function() {
  chrome.tabs.create( {}, function( tab ) {
     createdTabs[tab.id] = true;
  }
}

chrome.tabs.onUpdate.addListener(function(tabId, changeInfo) {
  if( createdTabs[tabId] && changeInfo.url )
    chrome.tabs.executeScript( tabId, {file: 'script.js'} );
}