带有动态过滤器的 onBeforeRequest 事件
onBeforeRequest event with dynamic filter
我正在开发一个浏览器扩展,它可以根据客户需求阻止对特定 url 的调用。
需要阻止的 url 正在作为 "localStorage" 个参数传递。
这是我的扩展代码:
function logURL(requestDetails) {
console.log("Loading: " + requestDetails.url);
return {cancel: true};
}
browser.webRequest.onBeforeRequest.addListener(
logURL,
{urls: (localStorage.getItem('block_urls') ? localStorage.getItem('block_urls') : ["https://default/default"] )},
["blocking"]
);
我期望发生的是在每个请求之前,urls 将从 localStorage 中读取并相应地被阻止。如果 localStorage 为 null,我有一个默认的 url 模式(基本上什么都不做)。
实际发生的是过滤器参数 (urls) 仅被调用一次(加载扩展时),而不是在每次请求之前调用。
有什么方法可以动态更改此事件的过滤器吗?
感谢各位帮手
有两种方法可以做到这一点:
- 倾听每一个可能的 URL 并通过简单的 "if" 语句过滤出您自己需要的事件
- 当 browser.storage.local 的内容发生变化时移除事件监听器并重新附加事件监听器
我正在开发一个浏览器扩展,它可以根据客户需求阻止对特定 url 的调用。
需要阻止的 url 正在作为 "localStorage" 个参数传递。
这是我的扩展代码:
function logURL(requestDetails) {
console.log("Loading: " + requestDetails.url);
return {cancel: true};
}
browser.webRequest.onBeforeRequest.addListener(
logURL,
{urls: (localStorage.getItem('block_urls') ? localStorage.getItem('block_urls') : ["https://default/default"] )},
["blocking"]
);
我期望发生的是在每个请求之前,urls 将从 localStorage 中读取并相应地被阻止。如果 localStorage 为 null,我有一个默认的 url 模式(基本上什么都不做)。
实际发生的是过滤器参数 (urls) 仅被调用一次(加载扩展时),而不是在每次请求之前调用。
有什么方法可以动态更改此事件的过滤器吗?
感谢各位帮手
有两种方法可以做到这一点:
- 倾听每一个可能的 URL 并通过简单的 "if" 语句过滤出您自己需要的事件
- 当 browser.storage.local 的内容发生变化时移除事件监听器并重新附加事件监听器