以编程方式在chrome扩展中启用内容脚本

时间:2017-09-28 19:34:38

标签: javascript google-chrome-extension

我开发了一个镀铬扩展程序,它工作得很好。

manifest.json的一部分如下所示:

"content_scripts":[
        {
            "js":["js/script.js"],
            "css": ["css/style.css"],
            "matches": ["http://localhost/*", "https://localhost/*"]
        }
    ],

所以扩展只在域localhost时注入内容脚本,这也正常工作。现在我想要一种方法,扩展程序弹出窗口可以包含 enable extenstion on this domain disable extension on this domain ,这样用户就可以启用/禁用根据需要进行扩展

我在多个广告拦截器插件中看到过,所以我想它应该是可能的。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

Google 正在为扩展清单 v3 开发程序化脚本注册。新 API 将被称为 chrome.scripting.registerContentScript 并且几乎与 Firefox 已有的相匹配,减去 API 的直观命名。您可以在此Chrome bug中关注实施状态。

答案 1 :(得分:0)

这需要两个部分:

程序脚本注入

现在有contentScripts.register() API,可让您以编程方式注册内容脚本。

browser.contentScripts.register({
    matches: ['https://your-dynamic-domain.example.com/*'],
    js: [{file: 'content.js'}]
});

此API仅在Firefox中可用,但是您可以使用Chrome polyfill

获取新权限

通过使用chrome.permissions.request,您可以添加可以在其上注入内容脚本的新域。一个例子是:

// In a content script, options page or popup
document.querySelector('button').addEventListener('click', () => {
    chrome.permissions.request({
        origins: ['https://your-dynamic-domain.example.com/*']
    }, granted => {
        if (granted) {
            /* Use contentScripts.register */
        }
    });
});

为此,您必须通过将其添加到manifest.json

中来允许按需添加新的来源。
{
    "optional_permissions": [
        "http://*/*",
        "https://*/*"
    ]
}

还有一些工具可以为您和最终用户进一步简化此操作,例如 webext-domain-permission-toggle and webext-dynamic-content-scripts,许多与GitHub相关的扩展都使用它来添加对自托管GitHub安装的支持。

他们还将在下次浏览器启动时注册您的脚本,并允许用户删除新的权限和脚本。