【问题标题】:How do you pass a variable from JavaScript to C++ in PPAPI?如何在 PPAPI 中将变量从 JavaScript 传递到 C++?
【发布时间】:2015-07-28 14:06:51
【问题描述】:

我正在查看某人的代码(不可联系),他们已经设置了一个与服务器通信并运行一些 C++ 代码的 websocket 客户端。这适用于新的 Chrome PPAPI。我可以将变量从客户端传递到服务器,但我不确定如何将它们中继到 C++ 端以改变代码中发生的情况?

因此,如果客户端传递 1,则 C++ 代码执行一件事,如果传递 2,则执行另一件事。我只是看不出它是如何做到的。

似乎启动 C++ 代码运行的 JavaScript 是:

function onStartTest(e)
{

    console.log('Start Test');
    var hostname = document.getElementById('hostname').value;
    var message = 'start:'+hostname;
    common.logMessage(message);
    common.naclModule.postMessage(message);
    e.preventDefault();
    return false;
}

我查看了一些示例,但无济于事。

【问题讨论】:

    标签: javascript c++ variables google-nativeclient ppapi


    【解决方案1】:

    来自 JavaScript 的所有异步消息都在 HandleMessage 函数中处理,在您的 pp::Instance 中定义:

    class MyInstance : public pp::Instance {
      ...
      virtual void HandleMessage(const pp::Var& message) {
        ...
      }
    };
    

    在您的示例中,您正在发送一个字符串值。要提取它,您可以使用 pp::Var::AsString 方法:

    virtual void HandleMessage(const pp::Var& message) {
      if (message.is_string()) {
        std::string str_message = message.AsString();
        ...
      }
    }
    

    如果你只是想传递数字,你也可以这样做:

    virtual void HandleMessage(const pp::Var& message) {
      if (message.is_int()) {
        int32_t int_message = message.AsInt();
        switch (int_message) {
          case 1: ...
          case 2: ...
        }
      }
    }
    

    查看documentation 此处了解更多信息。您可以发送 ArrayBuffers,甚至还可以发送任意对象。

    【讨论】:

      猜你喜欢
      • 2011-04-02
      • 2014-01-17
      • 2017-10-23
      • 2010-11-02
      • 2021-12-30
      • 2015-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多