Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.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_Google Chrome Extension - Fatal编程技术网

Javascript Chrome扩展:如何有条件地阻止和取消阻止请求?

Javascript Chrome扩展:如何有条件地阻止和取消阻止请求?,javascript,google-chrome-extension,Javascript,Google Chrome Extension,我想有条件地为请求块添加和删除一个侦听器,但当我删除该侦听器时,会得到一个无限循环,站点将不会加载anmyore。我正在使用存储器和一个按钮将状态设置为true of false,并在为true时添加侦听器,当为false时应删除侦听器 chrome.storage.onChanged.addListener(function (changes, namespace) { for (var key in changes) { var storageChange = changes[k

我想有条件地为请求块添加和删除一个侦听器,但当我删除该侦听器时,会得到一个无限循环,站点将不会加载anmyore。我正在使用存储器和一个按钮将状态设置为true of false,并在为true时添加侦听器,当为false时应删除侦听器

chrome.storage.onChanged.addListener(function (changes, namespace) {
  for (var key in changes) {
    var storageChange = changes[key];
    console.log('Storage key "%s" in namespace "%s" changed. ' +
      'Old value was "%s", new value is "%s".',
      key,
      namespace,
      storageChange.oldValue,
      storageChange.newValue);
  }

  chrome.storage.sync.get('status', function (data) {
    chrome.webRequest.onBeforeRequest.addListener(
      removeJS,
      {
        urls: ["https://devtest.com*"],
        types: ["script"]
      },
      ["blocking"]);

      function removeJS() {
        if (data.status === true) {
          return {
            cancel: true,
          }
        }
      }

      if (data.status === false) {
        chrome.webRequest.onBeforeRequest.removeListener(removeJS);
      }
    });
  });
我不知道我所指的回调是否正确。也许这就是问题所在,但我已经尝试了很多解决方案。

1)在另一个函数中声明removeJS会使它在每次运行get()时都成为一个新的函数对象引用,因此removeListener()无法工作,因为它需要您不再拥有的旧引用。您应该在全局上下文中声明removeJS,以便其对象引用保持不变。2) 不需要chrome.storage.sync.get,因为您可以直接使用changes.status.newValue。1)在另一个函数中声明removeJS会使它在每次get()运行时都成为新的函数对象引用,因此removeListener()将无法工作,因为它需要您不再拥有的旧引用。您应该在全局上下文中声明removeJS,以便其对象引用保持不变。2) 不需要chrome.storage.sync.get,因为您可以直接使用changes.status.newValue。