Gab*_*lli 2 javascript permissions google-chrome google-chrome-extension
我正在构建一个扩展,需要访问历史记录才能提供其中一项功能。
在发布了包含强制许可的版本后,我失去了部分用户,因为他们被大警报吓跑了,说该扩展程序可能能够窥探他们的历史记录(我真的不打算这样做) ,我决定发布一个版本,删除有问题的部分并禁用权限作为临时修复。
我想使用可选权限来实现此功能。
首先,我将新的可选权限添加到我的清单文件中:
...
"permissions": [
"https://news.ycombinator.com/",
"http://news.ycombinator.com/"
],
"optional_permissions": [ "history" ],
...
Run Code Online (Sandbox Code Playgroud)
然后,我构建了一个函数来请求处理扩展设置的脚本的权限:
Settings.prototype.applyPermissions = function (permissions, map) {
Object.keys(permissions).forEach(function (key) {
if (map[key]) {
var checkbox = map[key].getElementsByTagName("input")[0];
checkbox.addEventListener("change", function (e) {
if (this.checked) {
chrome.permissions.request(permissions[key], function(granted) {
if (granted) {
// Permission has been granted
} else {
// Not granted
}
});
}
});
}
});
};
Run Code Online (Sandbox Code Playgroud)
这里的关键部分是这样的:
checkbox.addEventListener("change", function (e) {
if (this.checked) {
chrome.permissions.request(permissions[key], function(granted) {
if (granted) {
// Permission has been granted
} else {
// Not granted
}
});
}
});
Run Code Online (Sandbox Code Playgroud)
我对由用户交互引起的事件执行请求(指南指出否则它将无法工作),并传递permissions[key]在我的扩展设置中指定的对象,如下所示:
"permissions": {
"mark_as_read": {
"permissions": ["history"]
}
}
Run Code Online (Sandbox Code Playgroud)
当访问它时permissions[key],我得到这部分:
{
"permissions": ["history"]
}
Run Code Online (Sandbox Code Playgroud)
这基本上是文档为此类请求显示的格式。
如果我运行此代码并切换应启用该功能的复选框,然后查看错误日志,我会看到此错误:
chrome.permissions 不可用:您无权访问此 API。确保所需的权限或清单属性包含在您的manifest.json 中。
我还尝试从后台页面访问此 API,它实际上是可用的,但不允许我使用,因为 Chrome 要求您通过用户交互访问它,并且如果您从用于请求激活的内容脚本。
我在这里遗漏了一些明显的东西吗?也许我需要在清单中添加一些内容,但我找不到任何有关它的明确文档。
我假设您正在尝试从内容脚本中执行此操作。您无法chrome.*从内容脚本访问大多数 API,包括chrome.permissions. 但是,您已经正确指出后台页面也不合适,因为权限更改需要直接的用户操作。
幸运的是,我们几乎没有用尽我们的选择。您可以在以下位置设置权限:
chrome-extension://包含该页面和必要的子资源web_accessible_resources在最后一种情况下,使用 获取 URL chrome.extension.getURL。如果您不希望权限请求界面与当前页面分开,您可以使用 iframe 将其直接注入到页面中。
因此,事实上,内容脚本和背景页面是唯一两个不能使用chrome.permissions.
| 归档时间: |
|
| 查看次数: |
1725 次 |
| 最近记录: |