webRequest可选权限和后台脚本

时间:2019-03-12 23:53:08

标签: javascript google-chrome-extension firefox-addon

我正在尝试将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%的情况下,仍然发生奇怪的事情,在授予许可之后,一段时间内,它仍然显示为未授予,并且注册侦听器失败。

0 个答案:

没有答案