BrowserExtension webRequest.onBeforeRequest返回承诺

时间:2017-12-20 16:44:02

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

我在Chrome和FireFox扩展程序中有以下内容:

function webListener(requestDetails) {
    var asyncCancel = new Promise((resolve, reject) => {
        resolve({ cancel : true });
    });
    return asyncCancel;
}

chrome.webRequest.onBeforeRequest.addListener(
    webListener, {
        urls: ["<all_urls>"],
        types: ["script"]
    }, ["blocking", "requestBody"]
);

问题是它不会取消请求。我阅读了Chrome文档和Firefox文档以及Firefox,它说它基于Chrome的API并且可以返回承诺以异步方式处理请求。

但是,除非我让它同步,否则它无法取消(IE:如果我只返回{cancel : true}而不是承诺,它就可以了。)

我做错了什么或Chrome和Firefox仅支持同步请求处理吗?

1 个答案:

答案 0 :(得分:2)

Chrome documentation向我朗读,好像你必须使用同步阻止响应来取消请求,这也是我的经验。

强调我的:

  

如果可选的opt_extraInfoSpec数组包含字符串'blocking'   (仅允许特定事件),处理回调函数   同步。这意味着请求被阻止,直到   回调函数返回。 在这种情况下,回调可以返回一个   webRequest.BlockingResponse确定了进一步的生命周期   请求。根据上下文,此响应允许取消   或重定向请求(onBeforeRequest),取消请求或   修改标题(onBeforeSendHeaders,onHeadersReceived)和   取消请求或提供身份验证凭据   (onAuthRequired)。

我的阅读是,如果您的事件处理程序是同步的,您只能影响请求生命周期(如取消它)。

此外,文档也没有提及任何关于直接支持Promise而不是BlockingResponse的内容,所以它似乎是特定于Firefox的功能。