如何移除chrome.storage.onChanged事件监听器?

5
我认为chrome.storage API的文档(这里)目前不够清晰。我正在使用以下代码添加监听器:
chrome.storage.onChanged.addListener(function(changes, namespace) {
    for (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.onChanged.removeListener() 方法?

2个回答

5
chrome.storage.onChanged.removeListener 可以接受你添加的监听函数作为输入,因此要在后面将其移除,你需要将该函数存储在一个变量中。下面的代码可以起到这个作用:
var myListenerFunction = function(changes, namespace) {
    for (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);
    }
};

// Add listener
chrome.storage.onChanged.addListener(myListenerFunction);

// Change value, will show output in console.log
chrome.storage.sync.set({'value': 'asd'});

// Remove listener
chrome.storage.onChanged.removeListener(myListenerFunction);

// Change value, will NOT show output in console.log as listener was removed
chrome.storage.sync.set({'value': 'asd123'});

更多阅读- Chrome扩展规范的事件部分 - https://developer.chrome.com/extensions/events


2

我在您提供的页面中没有看到chrome.storage.onChanged.removeListener。

您可以尝试将回调函数分配给变量,然后将其传递给AddListener。然后使用该变量来删除。

var changeListener = function(changes, namespace) {
    for (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.onChanged.removeListener(changeListner);


它被列为Event.removeListener。这里的Event是指此情况下的onChange - PSWai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接