我正在尝试使用 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功能。
目前我不知道如何做到这一点。
非常感谢任何帮助。