【发布时间】:2014-03-01 11:54:22
【问题描述】:
现在我正在使用 Google 的 Dart 开发 Chrome 扩展程序。 一切正常,除了 onMessage 处理。
使用的 Chrome 包:API Ref. ~ OnMessageEvent Ref.
在我正在调用的后台脚本中:
import 'package:chrome/chrome_ext.dart' as chrome;
void main() {
//...
//Binde event-listeners
chrome.runtime.onMessage.listen(onMessage);
//...
}
/**
* Message event handling
*/
bool onMessage(chrome.OnMessageEvent messageEvent){
JsObject message = messageEvent.message;
JsFunction response = messageEvent.sendResponse;
switch(message['action']){
//...
//Used by popup
case 'refresh':
print('Refresh called!');
chrome.storage.sync.get().then((_){
new JsObject(response, [new JsObject.jsify({'done': true})]);
});
//Idicate to send a response asynchronously (So it's said in the OnMessageEvent Ref.)
return true;
//...
}
return false;
}
我的弹出脚本如下所示:
//...
chrome.runtime.sendMessage({
'action': "refresh"
}).then((_){
print('receiving response!');
});
//...
工作原理:
从弹出脚本发送到后台脚本的消息“刷新”有效!
后台脚本打印Refresh called!
什么不起作用:
弹出脚本永远不会收到从后台脚本调用的响应:new JsObject(response, [new JsObject.jsify({'done': true})]);。
我不知道如何处理 sendResponse 以真正发送响应。也许我对 JsObject 的调用是错误的?希望其他人可以提供帮助。 (顺便说一句。非异步响应在这里也不起作用)
这个问题也在github.com/dart-gde/chrome.dart上公开。
【问题讨论】:
标签: google-chrome-extension dart