1

我正在尝试使用 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.addListener 回调的 observable功能。

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

非常感谢任何帮助。

4

0 回答 0