google-chrome-extension - 从权限移动到可选权限 : how to handle content_scripts?

标签 google-chrome-extension

最初在这里发布这个问题:

https://groups.google.com/a/chromium.org/d/msg/chromium-extensions/wbSpXvnO10A/nov36skmnQ0J

<小时/>

我的扩展程序有一项可选功能,可以与用户的 Gmail 选项卡进行交互。我们不想在用户首次安装扩展程序时看到的权限确认中提及 mail.google.com 域。因此,我将该条目从 list 的权限 block 中移出并移入了 optional_permissions block 中。我们还需要使用与 mail.google.com 相关的内容脚本,但在 list 中定义此脚本会导致某些用户发出“mail.google.com”权限警告。

我尝试删除 content_script list block 并使用编程注入(inject),如此处所述。 http://developer.chrome.com/extensions/content_scripts.html#pi 然而,以这种方式注入(inject)的脚本不是内容脚本,并且无法访问所需的 API(chrome.tabs 等)

是否有某种方法可以两全其美:使用可选权限,并将内容脚本添加到匹配的 URL,但前提是用户已批准可选权限?

最佳答案

您似乎可以创建一个后台页面,然后针对您的可选来源调用 chrome.tabs.query 以获取与该主机匹配的选项卡列表。然后,您可以调用对内容脚本的编程注入(inject) (chrome.tabs.executeScript)。这些都不需要“选项卡”权限(许多“选项卡”功能不需要任何特殊权限,它可以智能地让您查询来源与您的可选权限匹配的选项卡)

您可以每隔一秒左右调用一次,以查看是否有任何尚未调用executeScript 的新选项卡。

如果这是边缘触发的,那就太好了。请参阅https://code.google.com/p/chromium/issues/detail?id=264704

实际上,您可以通过使用 chrome.tabs.onUpdated.addListener 并简单地尝试在每次触发时注入(inject)(每次在任何选项卡中加载页面时,无论您是否有许可与否)。当您没有权限时,您会在后台脚本的控制台中看到很多错误。让您的内容脚本设置一个变量(例如 _I_already_execulated=true)并检查它是否存在,这一点很重要,这样您就不会多次注入(inject)(每次页面加载时都会触发此事件多次)

关于google-chrome-extension - 从权限移动到可选权限 : how to handle content_scripts?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16399093/

相关文章:

javascript - 在注入(inject)内容脚本之前传递变量

javascript - 创建 Chrome 扩展上下文菜单时 console.log 不起作用

javascript - 使用 chrome 扩展更改 div 中的样式表

javascript - 将消息从 contentScript 发送到 InjectedScript

javascript - chrome 扩展 onInstalled 事件

javascript - 除了浏览器设置之外,还可以从弹出菜单更改 Chrome 扩展语言

google-chrome - 适用于企业策略的 Chrome 扩展程序中的 ExtensionInstallSources

javascript - 读取带有 chrome 扩展名的本地文件的内容

javascript - 在我的 chrome 扩展的其他选项卡中注入(inject)脚本时出错

json - 意想不到的字符。上传 Chrome 扩展程序时出错