`chrome.webRequest.onBeforeRequest.removeListener`? - 如何停止chrome Web侦听器

eva*_*vid 7 javascript google-chrome google-chrome-extension

所以我正在查看CatBlock扩展示例的示例代码chrome.webrequest,我看到它打开了监听器

chrome.webRequest.onBeforeRequest.addListener
Run Code Online (Sandbox Code Playgroud)

因此,当我想要关闭它时,我能做到吗

chrome.webRequest.onBeforeRequest.removeListener?

如果没有,我将如何摆脱它?

我认为这类似于Javascript的本机事件监听器,但我知道Chrome的扩展中使用的那个有点不同.

谢谢!

evamvid

Xan*_*Xan 16

首先,这里提供完整的文档.

addListener函数1通常有一个参数,该函数将在事件触发时作为回调执行.

可以传递命名函数,变量中引用的函数或匿名函数:

function callback_named (parameters) { /* ... */ }

callback_variable = function (parameters) { /* ... */ };

chrome.webRequest.onBeforeRequest.addListener(callback_named);
chrome.webRequest.onBeforeRequest.addListener(callback_variable);
chrome.webRequest.onBeforeRequest.addListener(function (parameters) { /* ... */ });
Run Code Online (Sandbox Code Playgroud)

要删除侦听器,请removeListener使用相同的函数引用进行调用.在匿名函数中,这显然是不可能的.因此,只有前两个可以删除:

chrome.webRequest.onBeforeRequest.removeListener(callback_named);
chrome.webRequest.onBeforeRequest.removeListener(callback_variable);
Run Code Online (Sandbox Code Playgroud)

请注意,您还可以测试特定的侦听器:

if(chrome.webRequest.onBeforeRequest.hasListener(callback_named)){
  // callback_named is listening
}
Run Code Online (Sandbox Code Playgroud)

或者,测试是否有听众:

if(chrome.webRequest.onBeforeRequest.hasListeners()) {
  // something is listening
}
Run Code Online (Sandbox Code Playgroud)

1某些API允许在回调参数之后进行偶数过滤和/或其他选项.实际上,webRequestAPI就是这样的实例之一,这使得上面的示例不完全正确(过滤器对于此API是必需的).但他们回答了问题的实质.

  • 仔细阅读webRequest文档.在这个例子中,`addListener`有3个参数,所以 - 是的. (2认同)