如何在dart中删除chrome.webRequest API中的侦听器?

时间:2014-07-20 21:07:36

标签: google-chrome-extension dart dart-js-interop

`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])}');            

1 个答案:

答案 0 :(得分:1)

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

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

var callback = new JsFunction.withThis((that, map) { /* some code */ });