Chrome扩展程序 - 要求新的权限

时间:2016-11-17 23:07:36

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

我已经在商店中添加了Chrome扩展程序,我需要添加更多权限,因为我想将其应用于更多网站。但是将它们放入权限数组会禁用扩展名,并且唯一需要新权限的指示是在汉堡菜单下,这完全没用。

以下是原始版本,由于它位于content_scripts对象中,因此似乎具有隐含的“https://mail.google.com”权限:

<nav>
  <ul>
    <li>style 1
      <ul class="drop-menu menu-1">
        <li>uno</li>
        <li>dos</li>
        <li>tres</li>
        <li>cuatro</li>
        <li>cinco</li>
        <li>seis</li>
      </ul>
    </li>
    <li>style 2
      <ul class="drop-menu menu-2">
        <li>uno</li>
        <li>dos</li>
        <li>tres</li>
        <li>cuatro</li>
        <li>cinco</li>
        <li>seis</li>
      </ul>
    </li>
  </ul>
</nav>

在一个完美的世界中,我只是添加了额外的“content_scripts”对象,但由于对新网站域的隐含权限,这会禁用该扩展。

使用“optional_permissions”:[“https://hangouts.google.com”]仍会停用该插件,但不会通知用户。

如果我将任何代码添加到后台脚本中,请说出以任何方式访问chrome.tabs的内容...... BOOM!这是隐含的许可,并且延期被禁用。

如何在不禁用扩展程序的情况下获取新权限?要求获得许可的弹出窗口将是一个完美的解决方案,但这不是我所提供的。

2 个答案:

答案 0 :(得分:0)

撇开内容脚本的问题,在大多数情况下,将权限列表从一个固定列表修补到另一个固定列表是不值得的。

您将使现有用户和新用户都通过运行时权限对话框,这会让新用户感到困惑。

可选权限的真正目的是允许用户在运行时未知的域中进行选择。

最好咬紧牙关并冒险禁用扩展程序。

如果您愿意,可以使用新权限发布第二个扩展程序,首先使其不显示,并发布促使用户安装新扩展程序的更新。

有些用户可能更喜欢这种情况,有些用户可能会更烦恼 - 从一开始就是一个双输的,你不会保留所有用户。但是,使用迁移路线,您将失去商店中的累积评级。

添加内容脚本确实是主机权限的隐式授权。以及在运行时never became supported/stable更改内容脚本配置的声明性API。

因此,如果你绝对决定采用可选的权限路由,那么你需要(效率低下,有限制)做programmatic injection

答案 1 :(得分:0)

除了现有答案(完全有效)之外,我还将建议如何处理可选权限,以防您决定避免在manifest.json中添加新权限

程序脚本注入

有一个新的contentScripts.register() API,您可以在获得许可后使用它在新域上有效地注册脚本。

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

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

获取新权限

您可以使用chrome.permissions.request允许用户按需添加新域,也可以安装我最近编写的模块(webext-domain-permission-toggle)以提供一个简单的UI来切换任何域的权限。

使用together with webext-dynamic-content-scripts时,您可以添加任何域,模块将自动在它们上注册您现有的content_scripts