0

chrome.webRequest.onBeforeRequest.removeListener 相关?-- 如何停止 chrome 网络监听器,我正在尝试使用 dart:js 取消注册监听器

调用后onBeforeRequest.callMethod('removeListener', [callback]);,我注意到仍在调用侦听器。此外,在添加侦听器后直接hasListener返回false(即使正在注册侦听器)。

var callback = (map) { /* some code */ };
var filter = new JsObject.jsify({"key": "value"});
var opt_extraInfoSpec = new JsObject.jsify(["extra opt"]);
// chrome.webRequest.onBeforeRequest.addListener
JsObject onBeforeRequest = context['chrome']['webRequest']['onBeforeRequest'];
onBeforeRequest.callMethod('addListener', [callback, filter, opt_extraInfoSpec]);
Logger.root.fine('main(): does callback exist: ${onBeforeRequest.callMethod('hasListener', [callback])}');            
4

1 回答 1

1

似乎有必要 100% 遵循dart:js如何在 javascript 环境中使用 dart 函数的建议。我想我的问题是原始的 dart 动态函数自动包装在代理中。因此 addListener 的 callMethod 使用了不同的代理对象,然后 hasListener 的 callMethod 使用了不同的代理对象,即使它们都基于相同的原始 dart 对象(即回调)。

解决方案是使用 JsFunction 并定义回调如下:

var callback = new JsFunction.withThis((that, map) { /* some code */ });
于 2014-07-21T21:11:09.033 回答