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()defineGetterdefineSetterlookupGetterlookupSetter

PPAPI を介して Chrome ブラウザと PNaCl プラグインの間で JavaScript 関数を正しく渡すにはどうすればよいですか?

4

1 に答える 1

1

申し訳ありませんが、これは不可能です。PostMessage を介して JavaScript とネイティブ クライアントの間で渡すことができる唯一の値は、https ://developer.chrome.com/native-client/pepper_stable/c/group___enums#ga9815041477d810724e44da862f9852ed で定義されています

つまり、undefined、null、Bool、Number、String、Array、Dictionary、ArrayBuffer、および Resource (またはこれらの組み合わせ) です。

オブジェクトはそのドキュメントにリストされていますが、サポートされていません。Dictionary は JSON オブジェクトのようなものです。これは単なる文字列と値のマッピングです。Resource は現在、FileSystem オブジェクトのみをサポートしています。

于 2015-06-11T18:03:00.590 に答える