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

Google chrome extension 在单个选项卡的范围内运行内容脚本,google-chrome-extension,Google Chrome Extension,我正在为Google Chrome开发一个扩展。我已经为我的扩展创建了一个图标。我想做的是: 用户单击扩展的图标 将打开一个新选项卡 内容脚本按清单文件中的设置运行,但仅在此文件中运行 标签 我认为这很清楚,但例如:假设我在清单文件中设置了以下属性: "content_scripts" : [ { "matches" : ["http://stackoverflow.com"], "js" : ["script.js"] } ] 假设我有两个选项

我正在为Google Chrome开发一个扩展。我已经为我的扩展创建了一个图标。我想做的是:

  • 用户单击扩展的图标
  • 将打开一个新选项卡
  • 内容脚本按清单文件中的设置运行,但仅在此文件中运行 标签
  • 我认为这很清楚,但例如:假设我在清单文件中设置了以下属性:

    "content_scripts" : [
        {
            "matches" : ["http://stackoverflow.com"],
            "js" : ["script.js"]
        }
    ]
    
    假设我有两个选项卡:第一个是手动打开的,第二个是通过单击扩展图标打开的。现在,我在两个选项卡中打开stackoverflow的索引页。在第一个选项卡中什么都没有发生,但在第二个选项卡中运行“script.js”脚本。
    我怎样才能做到呢?我知道我可以实现选项卡的id检查,但是没有更简单的方法来实现它吗?

    在这种情况下,您不应该使用清单中的
    内容脚本。您可以使用
    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'} );
    }