Javascript 如何在chrome扩展中更新onBeforeRequest事件侦听器?

Javascript 如何在chrome扩展中更新onBeforeRequest事件侦听器?,javascript,google-chrome-extension,Javascript,Google Chrome Extension,我有一个扩展,在后台页面中有以下事件侦听器 chrome.webRequest.onBeforeRequest.addListener( function(details){ if ( ... details.url is in ArrayOfURLs ... ){ ... do stuff ... } }, { urls: ["<all_urls>"], types: ["m

我有一个扩展,在后台页面中有以下事件侦听器

chrome.webRequest.onBeforeRequest.addListener(
    function(details){
        if ( ... details.url is in ArrayOfURLs ...  ){
            ... do stuff ...
        }
    }, {
        urls:  ["<all_urls>"],
        types: ["main_frame"]
    }, ["blocking"]
);

当我从ArrayFurls数组中添加/删除项时,有没有办法更新事件侦听器?

通常的做法是删除旧的处理程序并添加新的处理程序

function requestHandler(details){
  /* ... do stuff ... */
}

function setListener(ArrayOfURLs) {
  chrome.webRequest.onBeforeRequest.removeListener(requestHandler);
  chrome.webRequest.onBeforeRequest.addListener(
    requestHandler,
    { urls: ArrayOfURLs, types: ["main_frame"] },
    ["blocking"]
  );
  chrome.webRequest.handlerBehaviorChanged();
}

最后一个调用是必需的,因为Chrome缓存了规则,但它是。

我认为关于规则和动态分配规则的部分可能会引起您的兴趣:@gpgekko规则系统可以调用的操作数量非常有限<代码>declarativeWebRequest提供所需操作的API不稳定,并且没有时间表提供。太好了,不会经常调用它,所以应该可以。谢谢
function requestHandler(details){
  /* ... do stuff ... */
}

function setListener(ArrayOfURLs) {
  chrome.webRequest.onBeforeRequest.removeListener(requestHandler);
  chrome.webRequest.onBeforeRequest.addListener(
    requestHandler,
    { urls: ArrayOfURLs, types: ["main_frame"] },
    ["blocking"]
  );
  chrome.webRequest.handlerBehaviorChanged();
}