【问题标题】:Chrome extension: How to inject HTML into any tab w/o using <all_urls>Chrome 扩展:如何使用 <all_urls> 将 HTML 注入任何标签页
【发布时间】:2021-05-19 22:50:06
【问题描述】:

一旦计时器完成,我正在尝试将内容脚本注入用户的当前选项卡。因此,我的清单是:

"content_scripts": [{
    "matches": ["<all_urls>"],
    "js": ["jquery-3.5.1.min.js", "flipclock-min.js", "content.js"],
    "css": ["normalize.min.css", "styles2.css", "flipclock.css", "css.css"]
}]

根据网店发布流程:

  • 广泛的主机权限

与其请求广泛的主机权限,不如考虑使用 activeTab 权限,或指定您的扩展程序需要的站点 进入。这两个选项都比允许完全访问更安全 不确定数量的网站,它们可能有助于最大限度地减少审查 次。

activeTab 权限允许访问选项卡以响应 明确的用户手势。

{
...
"permissions": ["activeTab"]
}

改用 activeTab 对我来说是有意义的。但是,正如他们所提到的,我可以在许可而不是 content_scripts 的情况下使用它,否则我会得到:

Invalid value for 'content_scripts[0].matches[1]': Missing scheme separator.

我该怎么办?

【问题讨论】:

    标签: google-chrome-extension manifest manifest.json


    【解决方案1】:

    activeTab 不会在计时器上完全自动工作,因为它需要明确的用户操作:用户必须点击您的扩展程序图标(或通过commands API 热键、contextMenus API菜单或omnibox API 关键字,documentation 中的更多信息)来启动或设置计时器。

    通过此类用户操作activeTab 将授予对当前选项卡的访问权限,因此您的后台脚本可以使用chrome.tabs.executeScript 注入脚本(每个脚本使用一个调用)。

    并且,删除 manifest.json 中的 content_scripts

    【讨论】:

    • 感谢您提供有用的见解。只是为了确保,是否需要在每个打开的新选项卡中启动显式用户操作,或者一旦用户进行了显式用户操作,一旦对“任何”选项卡授予任何权限,该选项卡就被允许一次全部或不允许,所有标签都有权限吗?我希望最后一种情况是这样,因为在我的情况下,用户任一情况都必须启动计时器,但随后希望在计时器完成后“自动”在任何选项卡中注入内容脚本。
    • 最后,即使我从清单中完全取出内容脚本,即使重新启动该过程,网络商店仍然要求我证明我的托管权限。有什么原因吗?
    • 1) 请参阅我的回答中的“activeTab 将授予对当前选项卡的访问权限”。 2) 听起来像是一个单独的问题,所以请确保包含MCVE
    • 在授予权限时只有一个当前标签页。这里的关键词是“tab”(意思是tab的内容)而不是“current”。
    • 不,这不是可以传给朋友的票。
    猜你喜欢
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 2012-04-23
    • 2019-09-05
    相关资源
    最近更新 更多