我正在开发一个chrome扩展程序,我想在该扩展程序中将内容脚本注入(inject)到URL列表中。通常我会使用常规语法:

{
  "name": "My extension",
  ...
  "content_scripts": [
    {
      "matches": ["http://www.google.com/*"],
      "css": ["mystyles.css"],
      "js": ["jquery.js", "myscript.js"]
    }
  ],
  ...
}

但是对于匹配模式,我想从服务器中提取数组。有没有办法以编程方式设置“matches”数组(例如,从background.js文件)?

最佳答案

据我所知,您无法从扩展名内修改manifest.json文件。您可以做的是,当标签的URL与您从服务器获得的URL之一匹配时,以编程方式从后台页面注入(inject)内容脚本。

请注意,您将需要tabs<all_urls>权限。

background.js

var list_of_URLs; //you populate this array using AJAX, for instance.

populate_list_of_URLs();

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab){
    if (list_of_URLs.indexOf(tab.url) != -1){
        chrome.tabs.executeScript(tabId,{file:"jquery.js"},function(){
            chrome.tabs.executeScript(tabId,{file:"myscript.js"});
        });
    }
});

07-24 09:44
查看更多