【问题标题】:Moving permissions to optional on chrome extension将权限移动到 chrome 扩展上的可选权限
【发布时间】:2017-05-25 17:27:43
【问题描述】:

我了解到 Chrome 在添加新权限时会禁用扩展程序。

当我向我的扩展程序添加新功能时,我需要在 permissions 列表中添加新站点。现在我知道我应该使用optional_permissions

我的问题是:

  1. 如果我将站点列表从permissions 移动到optional_permissions,用户是否需要再次批准这些站点?或者只是我随着时间的推移添加的那些。
  2. 这些更改是否会导致扩展程序被禁用?:

    一个。我在content_scripts 条目的matches 部分添加网站

    b.我在externally_connectable 条目的matches 部分添加网站

  3. 有没有办法在optional_permissions中定义externally_connectable

相关链接:chrome.permissions | Permission Warnings


更新:当 Chrome 禁用我的扩展程序时,我在清单中添加了 content_scripts > matchesexternally_connectable 上的一个站点以及一个 matches 站点。后者在权限警告中显示了一个新行,即"Communicate with cooperating websites"。我不确定是哪个更改导致了禁用,这也是我询问externally_connectable 的原因。

【问题讨论】:

  • 你试过test permission warnings吗?
  • @Deliaz 不,但在再次更新主机之前我肯定会这样做
  • 我不认为以这种方式测试它是可能的了。可能需要向商店添加测试扩展。
  • @Xan 是否可以为已发布的扩展程序定义测试帐户,或者我是否需要为此测试复制扩展程序?
  • 为了安全起见,我会使用一个全新的、未列出的扩展程序。

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


【解决方案1】:

为了测试扩展程序何时被 Chrome 禁用,我在 Chrome 网上应用店中创建了一个私有扩展程序。

我从manifest.json 的简单定义开始,然后一一添加字段和设置。对于每个测试,我:

  1. 已将新版本上传到商店
  2. 等待 Google 发布扩展程序(这花了很多时间!)
  3. 强制对测试人员的帐户进行扩展更新
  4. 写下结果

经过 13 次测试,这是我发现的:


manifest 中的更改会禁用扩展

  • "content_scripts" > "matches" 添加一个条目 [警告:“在 example.com 上读取和更改您的数据”]
  • 添加"externally_connectable" > {"ids", "matches"} [警告:“与合作网站沟通”]

manifest 中未禁用扩展的更改(无警告)

  • 添加"declarativeContent"权限
  • 添加"optional_permissions" > 所有主机
  • "externally_connectable" > "ids" 添加一个条目(在externally_connectable 被接受之后)
  • "externally_connectable" > "matches" 添加一个条目(在externally_connectable 被接受之后)
  • "externally_connectable" > "matches" 添加一个没有权限的主机条目(在externally_connectable 被接受之后)
  • 添加"incognito": "split"
  • 添加"content_security_policy" > script-src URL
  • 添加"web_accessible_resources"

另外,permission_warnings#nowarning docs 中列出的权限。

我可能做了一些愚蠢的测试,比如"web_accessible_resources",但我更喜欢这样,而不是让 Chrome 再次禁用我的扩展程序。


特殊测试

由于我要迁移到optional_permissionspermissions 中列出的所有主机都将被删除。所以,我想知道当新的更新不再具有有问题的权限时,禁用的扩展会发生什么:

更新 1:在 "content_scripts" 添加新主机 > "matches" => 扩展已禁用

更新 2:有问题的主机已从 "content_scripts" 中删除 => 扩展再次启用

总之,如果您犯了错误,您可以发布一个新版本,回滚导致扩展程序被禁用的更改

如果我将站点列表从permissions 移动到optional_permissions,用户是否需要再次批准这些站点?或者只是我随着时间的推移添加的那些。

答案很简单,不。随着时间的推移,Chrome 会存储授予扩展程序的所有权限。因此,只有optional_permissions 上的新主机需要获得批准。

【讨论】:

  • 这是一个很好的见解,非常感谢您花时间分享这些行为。
  • 有没有人测试过“存储”权限并且可以判断这是否会导致扩展被禁用? (希望避免在 CWS 中等待测试扩展审核)
【解决方案2】:
  1. 如果我将站点列表从权限移至 optional_permissions,用户是否需要再次批准这些站点?或者只是我随着时间的推移添加的那些。

新用户:是的,他们需要批准。

更新的现有安装:很可能没有。

请考虑:即使您完全删除了某个权限,然后又将其放回原处,它仍然被视为已授予。

一般文档引用是:“如果添加权限导致的警告消息不同于用户已经看到和接受的警告消息,Chrome 会提示用户。”

  1. 这些更改是否会导致扩展程序被禁用?:

    一个。我在content_scripts 条目的matches 部分添加网站

    b.我在externally_connectable 条目的matches 部分添加网站

一个。将匹配项添加到content_scripts 相当于授予完整的主机权限,如果它是新主机,则会导致您的扩展程序被禁用。如果您已经拥有该主机的主机权限,则不会禁用它。

b.我不知道。从理论上讲,这不会授予您的扩展任何新权限,因此不应该这样做。

  1. 有没有办法在 optional_permissions 中定义 externally_connectable?

根据文档,没有。一开始就没有权限。

【讨论】:

  • 关于 2.a.,有没有办法在 content_scripts > matches 添加新主机而不会导致扩展被禁用?如果我在optional_permission 上使用“http://*/”并在运行时请求新的主机权限,扩展是否仍会被禁用?
  • 运行时询问的重点是避免被禁用;但如果您添加内容脚本匹配,则它是非可选的主机权限。如果您想使用具有可选权限的内容脚本,则必须以编程方式注入。
  • 所以,我没有添加content_scripts,而是添加了站点权限并注入与以前相同的文件。我想我也必须模拟document_end,不知道如何解决"all_frames"
  • 阅读 chrome.tabs.executeScript 的文档 - 它需要很多可选参数来复制清单键。
  • 感谢提示,可以看到对应的参数了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-26
  • 1970-01-01
相关资源
最近更新 更多