我正在寻找一种如何使Chrome Content Script匹配URL可配置的方法。
通常,脚本的URL在manifest.json
数组中的matches
中指定。我相信我可以将其设置为http://*/
或https://*/
并检查/过滤脚本开头所需URL的执行情况,但我想知道是否有更简洁的方法来执行此操作。
有没有办法如何为配置的URL运行脚本,如果URL不匹配,根本不运行?
由于
答案 0 :(得分:5)
这是可能的。看看可选权限。其配置在官方文档中进行了解释。
简而言之,您要求所有网址都具有可选权限,然后用户可以添加更多网域,并且Chrome会记住每个批准。
当用户执行用户操作时(例如在键入新域后按下OK按钮)进行chrome api调用以请求权限。如果它已经拥有它,则不再要求许可。否则,chrome会显示一个模态镀铬对话框,要求用户批准新的权限。
我将继续解释选项,但我发现了另一个s.o.答案可以很好地解释您的选择。 https://stackoverflow.com/a/26677279/2213940
答案 1 :(得分:2)
感谢您的建议,但我最终使用了程序化注入的脚本(更多信息请访问:Chrome Developer: Programmatic Injection。
根据文档,我在manifest.json
:tabs
和通用http://*/
中添加了两项权限,以访问用户可能需要的任何域。
然后创建了一个后台脚本,用于检查选项卡的URL是否发生更改,如果它与用户设置的chrome.settings
中存储的设置匹配,则会注入所请求的脚本。
这样只会在没有脚本实际加载到内存中的情况下进行检查。
以下是manifest.json
的一部分:
"permissions": [
"tabs",
"http://*/", "https://*/"
],
"background": {
"scripts": [ "background.js" ],
"persistent": false
},
脚本注入:
// inject the script
chrome.tabs.executeScript(tabId, {
file: 'script.js',
runAt: 'document_end'
});
修改强>
检查请求的网址:
// var url = ''; // get URL from chrome.settings
// attach a listener
chrome.tabs.onUpdated.addListener(tabUpdated);
// check that the url starts with the saved one
var tabUpdated = function (tabId, changeInfo, tab) {
if (tab.url.indexOf(url) === 0) {
// run the script
}
};