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

Я написал простой плагин 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();
}

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

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


person timrau    schedule 11.06.2015    source источник


Ответы (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.

person binji    schedule 11.06.2015