我目前正在开发非常简单的Chrome扩展程序,它可以处理对指定网址(白名单)的请求并做一些魔术。
我在* js文件中定义的侦听器很少,如下所示:
chrome.webRequest.onBeforeRequest.addListener(function1, filter,['blocking']);
chrome.webRequest.onBeforeSendHeaders.addListener(function2, filter,['blocking','requestHeaders']);
function1
和function1
是来自同一文件的常规函数,它们可以完美地完成工作。
filter
是白名单。它是以这种方式在此文件顶部定义的变量:
var filter={"urls": ["url_pattern_1", "url_pattern_2"],
"types": ["main_frame", "sub_frame", "xmlhttprequest"]};
其urls
块包含的网址格式比permissions
manifest.json
处预定义的更多。
直到这个时候一切正常。
filter
时,会出现 问题。
我在扩展程序的设置中添加了输入字段,用户可以预先设置应由扩展程序处理的其他URL(仅添加到白名单)。我首先将它们存储在localStorage
,然后在其他功能中添加到filter['urls']
。我确定它们是在该函数的末尾添加的,但是当我尝试向任何这些URL发送请求时,扩展无效,因为filter['urls']
具有在开始时定义的相同状态,修改不是'应用。
所以问题是我如何实现chrome.webRequest
侦听器中使用的动态更改过滤器来获取这种白名单逻辑?
P.S。我的主要语言是Java,这是我第一次使用JS和Chrome API,对不起,如果我错过了一些“显而易见的事情”。