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

Roc*_*ino 6 javascript google-chrome google-chrome-devtools

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);
    }
  });
Run Code Online (Sandbox Code Playgroud)

但是我如何删除这个监听器呢?如何使用该chrome.storage.onChanged.removeListener()方法?

tib*_*blu 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'});
Run Code Online (Sandbox Code Playgroud)

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