Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Chrome扩展删除侦听器不';行不通_Javascript_Jquery_Google Chrome_Google Chrome Extension - Fatal编程技术网

Javascript Chrome扩展删除侦听器不';行不通

Javascript Chrome扩展删除侦听器不';行不通,javascript,jquery,google-chrome,google-chrome-extension,Javascript,Jquery,Google Chrome,Google Chrome Extension,我正在构建我的第一个Chrome扩展,这是一个困扰我好几天的问题 当扩展打开时,它会添加一个侦听器并阻止请求,但当它关闭时,它应该删除侦听器(而不是阻止请求)。问题是,removeListener由于某种原因无法工作 chrome.storage.local.get(["button"], function(result) { // let extensionState = result.button; let blocksRequestsFunction = fun

我正在构建我的第一个Chrome扩展,这是一个困扰我好几天的问题

当扩展打开时,它会添加一个侦听器并阻止请求,但当它关闭时,它应该删除侦听器(而不是阻止请求)。问题是,removeListener由于某种原因无法工作

  chrome.storage.local.get(["button"], function(result) {
    //
    let extensionState = result.button;
    let blocksRequestsFunction = function(details) {
      if (extensionState === "on") {
        console.log("blocking:", details.url);
        return { cancel: true };
      } else {
        console.log("it's off");

        chrome.webRequest.onBeforeRequest.removeListener(
          blocksRequestsFunction
        );
        return { cancel: true };
      }
    };

    function blocksAds() {
      chrome.webRequest.onBeforeRequest.addListener(
        blocksRequestsFunction,
        { urls: ["*://*.adjaranet.com/"] },
        ["blocking"]
      );
    }

    blocksAds();
  });
});

正如我已经解释过的,您需要使该函数引用成为全局的。将blocksRequestsFunction语句移动到任何函数之外,例如,将其作为脚本中的第一个语句。返回{cancel:true};在if和else块中,可能都应该返回false。我移动了函数,但在函数中,我有另一个变量“extensionState”。