0

我写了一个简单的 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 函数?

4

1 回答 1

1

抱歉,这是不可能的。可以通过 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 对象;它只是一个字符串值映射。Resource 当前仅支持 FileSystem 对象。

于 2015-06-11T18:03:00.590 回答