在我的中
假设我有两个值为3和4的输入字段:
<form onchange="reload()">
<h2>Input:</h2>
<input type="number" id="val1" name="val1" value="3">
<input type="number" id="val2" name="val2" value="4">
<br><br>
<h2>Output</h2>
<input type="text" id="out" name="out" value="untouched by C++"><br>
</form>
In my JavaScript
我得到这两个值,并将它们推入如下数组:
Module = document.getElementById('module');
var msg = [];
msg.push(Number(document.getElementById('val1').value));
msg.push(Number(document.getElementById('val2').value));
然后我将它发送到我的C++文件以处理消息
Module.postMessage(msg);
在我的C++文件中,这里是我被困的地方。
我必须处理消息的代码如下
virtual void HandleMessage(const pp::Var& var_message) {
std::string message = var_message.AsString();
pp::Var var_reply = pp::Var(message);
PostMessage(var_reply);
}
问题是它处理字符串,实际上,如果我的msg是数组的类型,它就会崩溃。
我希望它期待并接受的是一个数组或一个对象。
基本上,就像这样:
virtual void HandleMessage(const pp::Var& var_message) {
pp::Var var_reply = var_message[0] + var_messgae[1]; // I expect this to be 3+4=7
PostMessage(var_reply);
}
有人能帮我弄清楚如何在我的JavaScript中期望数组或对象来自C++,这样我就可以一起计算值并将结果发送回JavaScript吗?
发布于 2013-07-29 11:05:20
我已经解决了我的问题。最好的方法是使用对象并将值作为JSON对象传递,如下所示
in JavaScript
values = {
"val1": Number(document.getElementById('val1').value),
"val2": Number(document.getElementById('val2').value)
};
msg = JSON.stringify(values);
Module.postMessage(msg);
然后处理消息并将响应发送回JavaScript
in C++:
在头文件中,您需要添加picoJSON来处理JSON和sstream,以便使用JSON
#include <sstream>
#include "picojson.h"
using namespace std;
然后在后面的代码中:
virtual void HandleMessage(const pp::Var& var_message) {
picojson::value v;
// pass the message that was sent from JavaScript as a string
// var_message.AsString() will be in form "{\"val1\":4,\"val2\":4}");
// and convert it to istringstream
istringstream iss2((string)var_message.AsString());
// parse iss2 and extract the values val1 and val2
string err = picojson::parse(v, iss2);
int val1 = (int)v.get("val1").get<double>();
int val2 = (int)v.get("val2").get<double>();
// finally send the message and you'll see the sum in the JavaScript
PostMessage( val1 + val2 );
}
发布于 2013-10-22 20:37:42
文档还没有更新,但是到了pepper_29
,现在有了一个用于访问数组的pp::VarArray
接口。
您可以看到新的C++接口这里的头文件。
下面是如何使用它(未经测试):
virtual void HandleMessage(const pp::Var& var_message) {
if (!var_message.is_array()) return;
pp::VarArray array(var_message);
// Do some stuff with the array...
uint32_t length = array.GetLength();
double sum = 0;
for (uint32_t i = 0; i < length; ++i) {
pp::Var element = array.Get(i);
if (element.is_number()) {
sum += element.AsDouble();
}
}
pp::Var var_reply(sum);
PostMessage(var_reply);
}
发布于 2013-07-27 19:59:34
我也有同样的问题,我想发送一个字符串数组
var nativeArray = new Array();
nativeArray[0] = "Item 1"
nativeArray[1] = "Item 2"
naclModuleElement.postMessage(nativeArray)
在HandleMessage中没有任何调用
发送nativeArray.length
可以在NaCl端显示“2”
经过一番研究,我发现在AsArray()
类中没有pp::Var
函数。
只有原语可用。
有一个类pp:VarArrayBuffer
,可以用来发送/接收二进制信息。这可以提供帮助(但没有下载发布在其中的示例)
https://stackoverflow.com/questions/17883213
复制相似问题