我可以使用外部数组来匹配用于内容脚本注入的 URL 吗?
Can I use an external array to match URLs for content script injection?
我正在开发 chrome 扩展程序,我想在其中将内容脚本注入到 URL 列表中。通常我会使用常规语法:
{
"name": "My extension",
...
"content_scripts": [
{
"matches": ["http://www.google.com/*"],
"css": ["mystyles.css"],
"js": ["jquery.js", "myscript.js"]
}
],
...
}
但是对于匹配模式,我想从服务器中提取数组。有没有办法以编程方式设置 "matches" 数组(例如来自 background.js 文件)?
据我所知,您无法从扩展中修改 manifest.json
文件。当Tab的URL与您从服务器中获得的URL S匹配之一时,您可以做的是从背景页面上编程注入您的内容脚本。
请注意,您需要 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"});
});
}
});
我正在开发 chrome 扩展程序,我想在其中将内容脚本注入到 URL 列表中。通常我会使用常规语法:
{
"name": "My extension",
...
"content_scripts": [
{
"matches": ["http://www.google.com/*"],
"css": ["mystyles.css"],
"js": ["jquery.js", "myscript.js"]
}
],
...
}
但是对于匹配模式,我想从服务器中提取数组。有没有办法以编程方式设置 "matches" 数组(例如来自 background.js 文件)?
据我所知,您无法从扩展中修改 manifest.json
文件。当Tab的URL与您从服务器中获得的URL S匹配之一时,您可以做的是从背景页面上编程注入您的内容脚本。
请注意,您需要 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"});
});
}
});