来自NaCl新手的简单问题...
在我的JavaScript中,我向NaCl模块发布了一条消息。
NaCl模块处理完此消息后,如何在JavaScript中执行回调?
在getting-started-tutorial中,给出以下示例。
function moduleDidLoad() {
HelloTutorialModule = document.getElementById('hello_tutorial');
updateStatus('SUCCESS');
// Send a message to the Native Client module
HelloTutorialModule.postMessage('hello');
}
如何在HelloTutorialModule.postMessage('hello');中执行回调函数?
谢谢。
最佳答案
没有直接方法可以使NaCl模块接收到特定消息的回调。您可以自己手动进行操作,但是可以传递一个ID,然后将ID映射到回调中。
像这样(未经测试):
var idCallbackHash = {};
var nextId = 0;
function postMessageWithCallback(msg, callback) {
var id = nextId++;
idCallbackHash[id] = callback;
HelloTutorialModule.postMessage({id: id, msg: msg});
}
// Listen for messages from the NaCl module.
embedElement.addEventListener('message', function(event) {
var id = event.data.id;
var msg = event.data.msg;
var callback = idCallbackHash[id];
callback(msg);
delete idCallbackHash[id];
}, true);
然后在NaCl模块中:
virtual void HandleMessage(const pp::Var& var) {
pp::VarDictionary dict_var(var);
pp::Var id = dict_var.Get("id");
pp::Var msg = dict_var.Get("msg");
// Do something with the message...
pp::VarDictionary response;
response.Set("id", id);
response.Set("msg", ...);
PostMessage(response);
}
关于javascript - 向NaCl(Chrome Native Client)发送消息后如何实现回调?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23813270/