与`chrome.webRequest.onBeforeRequest.removeListener`? -- How to stop a chrome web listener相关,我试图使用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])}');
答案 0 :(得分:1)
似乎有必要100%遵循dart:js
建议如何在javascript环境中使用dart函数。我想我的问题是原始的dart动态函数自动包装在代理中。因此,addListener的callMethod使用了另一个代理对象,然后是hasListener的callMethod,甚至认为它们都是基于相同的原始dart对象(即回调)。
解决方案是使用JsFunction并定义回调如下:
var callback = new JsFunction.withThis((that, map) { /* some code */ });