【问题标题】:Make 'matches' URL of a Chrome Content Script Configurable使 Chrome 内容脚本的“匹配”URL 可配置
【发布时间】:2015-07-09 15:26:48
【问题描述】:

我正在寻找一种方法来使 Chrome 内容脚本匹配 URL 可配置。

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

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

谢谢

【问题讨论】:

  • 如果你希望它是 example.com,你可以使用*://*.example.com/*
  • 这是一个很好的建议,但仅对子域有效。我正在寻找可由用户配置的更通用的东西。
  • 如果它是用户可配置的,那么您将不得不允许一切,因为您不知道用户想要什么。我不认为你可以在不物理更改 manifest.json 的情况下更改值(这不是你想要的用户)

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


【解决方案1】:

这是可能的。看看可选权限。其配置在官方文档中有说明。

简而言之,你在可选权限中请求所有 url,然后用户可以添加更多域,chrome 会记住每个 aproval。

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

我打算继续解释选项,但我发现了这个其他的。答案很好地解释了您拥有的选项。 https://stackoverflow.com/a/26677279/2213940

【讨论】:

  • 我正在研究它,但这允许我添加更多权限,而不是内容脚本或其匹配项。内容脚本或其匹配不是权限类型。能具体点吗?
  • 链接答案中的chrome.declarativeContent.RequestContentScript 似乎是我正在寻找的内容,我会检查一下。
【解决方案2】:

感谢您的建议,但我最终使用了 Programmatic Injection 的脚本(更多内容请点击此处: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'
});

编辑

检查请求的 URL:

// 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
    }
};

【讨论】:

  • 对省略脚本的关键部分表示反对。 您的方法是有效的,但是 “检查选项卡的 URL 是否发生变化” 部分非常困难(需要检查许多事件),因此您完全忽略了这一点。
  • 我用符合我要求的支票编辑了答案,并回答了我的问题。实际上,我认为正确的检查并不困难,并且在 SO 上列出所有受支持的 chrome.tabs 事件对于解决这个问题很重要,因为它们都共享观察者模式。
  • 您不需要拥有如此无限的权限。使用可选权限在运行时构建您的权限。
猜你喜欢
  • 1970-01-01
  • 2023-03-21
  • 2017-04-11
  • 2017-04-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-05
  • 2011-10-31
  • 2013-09-07
相关资源
最近更新 更多