我正在尝试将webRequest作为我的Google Chrome扩展程序中的可选权限。 因此,我希望backgorund脚本仅在给予该权限的情况下侦听webRequest事件。
尝试通过以下代码实现这一目标:
chrome.permissions.contains({
origins: ["https://www.freelancer.com/projects/fileshare/*",
"https://freelancer-filestorage-pmb.s3.amazonaws.com/*"],
permissions: ["webRequest",
"webRequestBlocking"]
}, response => {
// only register the webRequest listener if there is this permission...
// I don't know if this is a valid way of doing this, but I don't have other ideas
if (response) {
chrome.webRequest.onHeadersReceived.addListener(details => {
console.log("went through the request");
return {responseHeaders: details.responseHeaders};
},
{ urls: ['https://freelancer-filestorage-pmb.s3.amazonaws.com/*'] },
['blocking', 'responseHeaders']
);
}
});
这似乎不起作用,即,即使我给予了许可,Web请求也不会被拦截。
我记得在文档中读到过一些内容,即在异步函数内部添加事件侦听器(例如我在此处所做的操作)将无法正常工作。但是,如何才能实现我所需要的呢? 不要异步注册侦听器,因为它们不会被正确触发。
如果我刚放
chrome.webRequest.onHeadersReceived.addListener
在后台脚本中,如果不检查权限,则会收到一个未定义webRequest的错误。
编辑:粘贴更多代码
EDIT2: chrome开发人员文档位于 https://developer.chrome.com/extensions/background_pages 这样说:
请勿异步注册侦听器,因为它们不会被正确触发。
我通过在后台脚本中设置消息侦听器解决了我的问题,该脚本会根据用户是设置权限还是撤销权限,为webRequest添加和删除侦听器。
在大约5%的情况下,仍然发生奇怪的事情,在授予许可之后,一段时间内,它仍然显示为未授予,并且注册侦听器失败。