如何删除chrome.storage.onChanged Event Listener

How to remove a chrome.storage.onChanged Event Listener?

本文关键字:storage onChanged Event Listener chrome 何删除 删除      更新时间:2023-09-26

我认为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()方法?

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

我在您提供的页面中没有看到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);