使Chrome内容脚本的“匹配”网址可配置

时间:2015-07-09 15:26:49

标签: javascript google-chrome google-chrome-extension

我正在寻找一种如何使Chrome Content Script匹配URL可配置的方法。

通常,脚本的URL在manifest.json数组中的matches中指定。我相信我可以将其设置为http://*/https://*/并检查/过滤脚本开头所需URL的执行情况,但我想知道是否有更简洁的方法来执行此操作。

有没有办法如何为配置的URL运行脚本,如果URL不匹配,根本不运行?

由于

2 个答案:

答案 0 :(得分:5)

这是可能的。看看可选权限。其配置在官方文档中进行了解释。

简而言之,您要求所有网址都具有可选权限,然后用户可以添加更多网域,并且Chrome会记住每个批准。

当用户执行用户操作时(例如在键入新域后按下OK按钮)进行chrome api调用以请求权限。如果它已经拥有它,则不再要求许可。否则,chrome会显示一个模态镀铬对话框,要求用户批准新的权限。

我将继续解释选项,但我发现了另一个s.o.答案可以很好地解释您的选择。 https://stackoverflow.com/a/26677279/2213940

答案 1 :(得分:2)

感谢您的建议,但我最终使用了程序化注入的脚本(更多信息请访问:Chrome Developer: Programmatic Injection

根据文档,我在manifest.jsontabs和通用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
    }
};