- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图根据存储在 chrome.storage.local 中的数据阻止我的 google chrome 扩展程序中的某些网络请求。但是我找不到返回“{cancel: true };”的方法onBeforeRequest.addListener 的回调函数里面。或者由于 chrome.Storage.local.get() 的异步方式,在其各自的回调函数之外从 storage.local 访问数据。
这是我的相关代码。
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();
}
关于javascript - 根据 chrome.storage 中的数据返回 chrome.webRequest.onBeforeRequest 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18577755/
我正在尝试构建自己的 chrome 扩展程序,并尝试使用 onBeforeRequest 添加事件处理程序。 我的manifest.json: { "manifest_version": 2,
我看了其他有同样问题的问题,但找不到解决方案。我的 manifest.json: { "background": { "scripts": [ "js/background.js"
我正在编写一个 Chrome 扩展程序,我想将某些 URL 重定向到另一个页面。 为此,我找到了 chrome.webRequest.onBeforeRequest 事件处理程序,在文档中指出我可以返
我正在开发一个浏览器扩展,它可以根据客户需求阻止对特定网址的调用。 需要阻止的 URL 作为“localStorage”参数传递。 这是我的扩展代码: function logURL(requestD
我有以下代码: chrome.webRequest.onBeforeRequest.addListener( function(details) { return { re
我在尝试制作扩展时遇到了一些问题。该扩展程序的工作是在发出请求之前检查 URL 并阻止提供的列表中可用的 URL。 manifest.json 文件加载声明并初始化数组的 flagged.js。然后,
Chrome 一直说:“无法读取未定义的属性‘onBeforeRequest’”。我不明白为什么。 背景.html: // list .json: { "name":
我正在使用 JavaScript API 开发一个 Chrome 扩展程序,其中我尝试在 URL 与 Web 请求 URL 模式匹配时重定向该 URL how chrome.webrequest.on
我正在尝试创建一个扩展来分析在 chrome 浏览器上发出的请求,但我无法让它工作。警报永远不会触发。 list .json { "name": "Test", "description":
我正在构建一个扩展程序,如果该网址位于黑名单中,该扩展程序会重定向到 google.com。我将黑名单存储在本地文件“list.txt”中,并使用 XMLHttpRequest 检索 URL 列表。我
我在后台页面中有一个带有以下事件监听器的扩展... chrome.webRequest.onBeforeRequest.addListener( function(details){
我正在尝试创建一个 Chrome 扩展程序,该扩展程序查询外部源作为阻止或允许通过特定页面的引用。以下是我的代码的一部分。我是 JavaScript 新手,范围似乎总是让我烦恼。 chrome.web
我在 Chrome 和 FireFox 扩展中有以下内容: function webListener(requestDetails) { var asyncCancel = new Promi
chrome.webRequest.onBeforeRequest.addListener(function(details) { if (localStorage.on == '1') {
我正在制作一个小型 google chrome 扩展程序,它正在监视页面正在进行的所有调用。这个想法是记录页面的行为方式以及进行了多少次外部调用。除了我需要获取发起调用的页面的源 url 的部分外,一
我试图让 onBeforeRequest 触发,但它不会触发一次。 background page console显示错误: Invalid value for argument 1. Expecte
我正试图在谷歌浏览器扩展程序中删除此监听器以阻止 url,但我不知道如何! chrome.webRequest.onBeforeRequest.addListener( f
我在后台脚本中使用webRequest.onBeforeRequest。然后,在内容(?)脚本中,即注入(inject)到原始页面,我向该页面发出我正在检测的请求的同一 URL 发出 AJAX 请求,
这里是一个将包含“someString”的 URL 重定向到本地主机的示例,但它会在 redirectUrl 或 cancel 之前解析该 URL 的 DNS ,这样会泄露一些数据,非常不安全。 并且
在 Chrome 扩展中,我需要知道 onBeforeRequest 回调中请求的 Content-Type 是什么,因为如果 Content-Type 是 application/x-www-for
我是一名优秀的程序员,十分优秀!