2015-06-11 4 views
0

Я написал простой echoer PNaCl плагин которого сообщение обработчик просто опубликовать входящее сообщение обратно без изменений:Как передать функции JavaScript между браузером Chrome и 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(); 
} 

к сожалению, в handleMessage(), message_event.data.tocall() больше не является функцией, а объект с полями defineGetter, defineSetter, lookupGetter, lookupSetter и т. Д.

Как я могу передать функцию JavaScript между браузером Chrome и плагином PNaCl через PPAPI правильно?

ответ

1

Извините, это невозможно. Доступны только те значения, которые могут быть переданы между JavaScript и Native Client через PostMessage: https://developer.chrome.com/native-client/pepper_stable/c/group___enums#ga9815041477d810724e44da862f9852ed

То есть: undefined, null, Bool, Number, String, Array, Dictionary, ArrayBuffer и Resource (или некоторая комбинация этих).

Объект указан в этом документе, но он не поддерживается. Словарь подобен объекту JSON; это просто отображение строковых значений. Ресурс в настоящее время поддерживает только объекты FileSystem.