以编程方式启用Chrome扩展名中的内容脚本



我已经开发了一个Chrome Extension,它的工作原理绝对很好。

manifest.json的一部分看起来像这样:

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

因此,仅当域是localhost时,扩展名才会注入内容脚本,这也可以正常工作。现在,我想要一种扩展弹出窗口可以具有 enable extension on this domain disable extension on this domain 的方法>。

我已经在多个广告障碍插件中看到,所以我想应该有可能。

这需要两个部分:

程序化脚本注入

现在有chrome.scripting.registerContentScripts() API,它使您可以编程注册内容脚本。

chrome.scripting.registerContentScripts([{
    id: "a-script",
    matches: ['https://your-dynamic-domain.example.com/*'],
    js: ['content.js']
}]);

获得新的权限

通过使用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-togglewebext-dynamic-content-scripts,许多与GITHUB相关的扩展程序都使用,以增加对自托管GitHub安装的支持。

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

Google正在研究扩展清单V3的程序化脚本注册。新的API将被称为Chrome.scripting.RegisterContentscript,并且几乎与Firefox已经拥有的内容相匹配,减去API的直观命名。您可以在此Chrome Bug中遵循实现状态。

相关内容

最新更新