Rx.js,处理Chrome扩展webrequest API回调函数

时间:2018-02-22 13:13:55

标签: google-chrome-extension rxjs observer-pattern rxjs5 chrome-webrequest

我正在尝试使用Rx.js来处理Chrome扩展程序webrequest API的流程。

每个webrequest addListener()调用都将强制回调函数作为第一个参数。这会将请求对象发送到该函数。但是,回调可以返回webRequest.BlockingResponse,以确定请求的进一步生命周期。

我正在努力处理阻塞响应,作为可观察的一部分。

此代码适用于检查所有图像请求,例如

onBeforeRequestHandler = function() {

        var filteredURLs = ["http://*/*", "https://*/*"]; 
        var resourceTypes = ["image"]; 
        var filter = { urls: filteredURLs, types: resourceTypes };
        var options = ["blocking"];

        return Rx.Observable.create(observer => {
            var listener = chrome.webRequest.onBeforeRequest.addListener(
                function requestHandler(obj) {
                    observer.next(obj);
                },
                filter, options);
            return unsubscribe => {
                chrome.webRequest.onBeforeRequest.removeListener(listener);
            };
        });

};

然后,我可以使用所有Rx.js运算符来执行此操作:

var source = onBeforeRequestHandler();
source.subscribe();

但是,如果在处理图像的过程中,我希望取消请求,我不知何故需要将一个阻塞响应对象(如此{cancel:true})返回到包含chrome.webRequest.onBeforeRequest的observable .addListener回调函数。

目前我不知道如何做到这一点。

任何帮助都非常感激。

0 个答案:

没有答案