我写了一个简单的 echoer PNaCl 插件,它的消息处理程序只是将传入的消息原封不动地发回:
class Instance : public pp::Instance {
public:
virtual void HandleMessage(const pp::Var& message_data) {
PostMessage(message_data);
}
};
而且,在 JavaScript 方面,我发布了一条消息,其数据是一个函数,期望得到相同的函数并执行响应的函数:
var funcobj = {
tocall: function() { alert('tocall called'); }
}
document.getElementById('echoFunc').addEventListener('click', function() {
console.log(funcobj);
// Post a function to plugin
common.naclModule.postMessage(funcobj);
});
function handleMessage(message_event) {
console.log(message_event);
message_event.data.tocall();
}
不幸的是, in handleMessage()
,message_event.data.tocall()
不再是一个函数,而是一个带有字段defineGetter
, defineSetter
, lookupGetter
,lookupSetter
等的对象。
如何通过 PPAPI 在 Chrome 浏览器和 PNaCl 插件之间正确传递 JavaScript 函数?