我正在尝试使用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回调函数。
目前我不知道如何做到这一点。
任何帮助都非常感激。