如何在 Chrome 浏览器和 PNaCl 插件之间正确传递 JavaScript 函数
How to pass JavaScript function between Chrome browser and PNaCl plugin correctly
我写了一个简单的回显器 PNaCl 插件,它的消息处理程序只是 post 传入的消息没有改变:
class Instance : public pp::Instance {
public:
virtual void HandleMessage(const pp::Var& message_data) {
PostMessage(message_data);
}
};
并且,在JavaScript这边,我post一条消息,它的数据是一个函数,希望得到相同的函数并执行响应的函数:
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();
}
不幸的是,在handleMessage()
中,message_event.data.tocall()
不再是一个函数,而是一个包含字段defineGetter
、defineSetter
、lookupGetter
、[=的对象19=],等等
如何通过 PPAPI 在 Chrome 浏览器和 PNaCl 插件之间正确传递 JavaScript 函数?
抱歉,这不可能。可以通过 PostMessage 在 JavaScript 和 Native Client 之间传递的唯一值在此处定义:https://developer.chrome.com/native-client/pepper_stable/c/group___enums#ga9815041477d810724e44da862f9852ed
即:undefined、null、Bool、Number、String、Array、Dictionary、ArrayBuffer 和 Resource(或这些的某种组合)。
该文档中列出了对象,但不受支持。字典就像一个 JSON 对象;它只是一个字符串值映射。资源目前仅支持 FileSystem 对象。
我写了一个简单的回显器 PNaCl 插件,它的消息处理程序只是 post 传入的消息没有改变:
class Instance : public pp::Instance {
public:
virtual void HandleMessage(const pp::Var& message_data) {
PostMessage(message_data);
}
};
并且,在JavaScript这边,我post一条消息,它的数据是一个函数,希望得到相同的函数并执行响应的函数:
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();
}
不幸的是,在handleMessage()
中,message_event.data.tocall()
不再是一个函数,而是一个包含字段defineGetter
、defineSetter
、lookupGetter
、[=的对象19=],等等
如何通过 PPAPI 在 Chrome 浏览器和 PNaCl 插件之间正确传递 JavaScript 函数?
抱歉,这不可能。可以通过 PostMessage 在 JavaScript 和 Native Client 之间传递的唯一值在此处定义:https://developer.chrome.com/native-client/pepper_stable/c/group___enums#ga9815041477d810724e44da862f9852ed
即:undefined、null、Bool、Number、String、Array、Dictionary、ArrayBuffer 和 Resource(或这些的某种组合)。
该文档中列出了对象,但不受支持。字典就像一个 JSON 对象;它只是一个字符串值映射。资源目前仅支持 FileSystem 对象。