根据chrome.storage中的数据返回chrome.webRequest.onBeforeRequest的值
return value of chrome.webRequest.onBeforeRequest based on data in chrome.storage
我正试图根据chrome.storage.local中存储的数据,在我的谷歌chrome扩展中阻止某些Web请求。然而,由于chrome的异步方式,我找不到在onBeforeRequest.addListener的回调函数内部返回"{cancel:true};"的方法,也找不到从storage.local访问其各自回调函数之外的数据的方法。Storage.local.get().
这是我的相关代码。
chrome.webRequest.onBeforeRequest.addListener( function(info) {
chrome.storage.local.get({requests: []}, function (result) {
// depending on the value of result.requests.[0].item I want to return "{cancel: true };" in order to block the webrequest
if(result.requests.[0].item == 0) return {cancel: true}; // however this is obviously in the wrong place
});
// if I put return {cancel: true} here, where it should be, I can't access the data of storage.local.get anymore
// if(result.requests.[0].item == 0) return {cancel: true};
});
有人能解决这个问题吗?谢谢你的帮助。
您只需交换回调:
chrome.storage.local.get({requests: []}, function (cache) {
chrome.webRequest.onBeforeRequest.addListener(function (request) {
if(cache.requests[0].item === 0)
return { cancel: true };
});
});
这是有道理的,因为您不是在每次请求时请求存储,而是只在内存中有存储后才侦听请求。
这种方法唯一的缺点是,如果在开始侦听后更新存储,它将不会生效。
要解决此问题,请删除侦听器并重新添加它:
var currentCallback;
function startListening() {
chrome.storage.local.get({requests: []}, function (cache) {
chrome.webRequest.onBeforeRequest.addListener(function (request) {
currentCallback = this;
if(cache.requests[0].item === 0)
return { cancel: true };
});
});
}
function update() {
if (typeof currentCallback === "function") {
chrome.webRequest.onBeforeRequest.removeListener(currentCallback);
currentCallback = null;
}
startListening();
}
相关文章:
- 如何在chrome启动时激发chrome.webRequest.onBeforeRequest.addListener(
- 阻止chrome.webRequest.onBeforeSendHeaders侦听器中的异步操作
- Chrome 插件的 webRequest.onCompleted 不会触发源自 Flash 的请求
- Chrome webRequest只侦听用户输入的URL
- 如何创建 chrome(扩展)webRequest 侦听器
- chrome.webrequest.onBeforeSendHeaders 从未调用过
- chrome.webRequest 事件不会被触发
- 如何使用“chrome.webRequest.onBeforeRequest”
- 如何在chrome扩展程序中静默取消webRequest
- 根据chrome.storage中的数据返回chrome.webRequest.onBeforeRequest的值
- chrome.webRequest.onBeforeRequest.addListener无法读取属性'onBe
- 如何使用chrome.experial.webRequest
- 收到响应后使用Chrome webRequest进行URL转发
- chrome.webRequest.onAuthRequired Listener
- Chrome webRequest responseBody (POST) error
- 谷歌chrome扩展webrequest拦截
- 使用chrome.downloads从通过chrome.webRequest找到的URL下载文件
- chrome.webRequest.onBefore重定向不停止重定向
- Chrome WebRequest不阻止正确
- Chrome webRequest onCompleted:页面大小