her*_*ass 12 javascript qbytearray qtwebengine
使用QWebChannel从QtWebKit迁移到QtWebEngine.
我有一个可调用的函数,它将QVariant对象发送到Javascript,它被视为JSON对象.因此,一个QString变成了string,一个QInt一个int,等等.
在没有QWebChannel的情况下使用QtWebKit,QByteArray被视为a Uint8ClampedArray,但现在直接转换为string使用UTF-8(我的QByteArray不是:())
我做错什么了吗 ?我该怎么办 ?
这是相关的代码部分:
//Qt Window class signal to javascript
void MyWindow::uplink(Response msg)
{
emit _nativeToJs(msg->toJson());
}
//Response class toJson() method
QVariantMap Response::toJson() const
{
QVariantMap map;
map["id"] = m_id; //qulonglong
map["src"] = QString(m_src);
map["dst"] = QString(m_dst);
map["status"] = m_status; //qint16
map["result"] = m_result; //QVariant, can be a map of string, arrays, etc
return map;
}
//Javascript
var foo;
new QWebChannel(qt.webChannelTransport, function(channel) {
//we connect the signal
channel.objects.foo._nativeToJs.connect(function(msg){
//msg is now a JSON object
});
});
Run Code Online (Sandbox Code Playgroud)
msg.result应该包含一个后来解码的钳位数组(msgpack数据).现在我有一个丑陋string的UTF-8字符解释为UTF-8,我无法做任何事情.
根本不是答案,而是研究的开始,因为这是一个非常有趣的问题。
在 Qt5.6 以下的 Qt 版本中,您可以通过查看 Qt 源代码来了解如何完成转换。特别是,我在文件中找到了这个函数C:\Qt\5.5\Src\qtwebkit\Source\WebCore\bridge\qt\qt_runtime.cpp:
JSValueRef convertQVariantToValue(JSContextRef context, PassRefPtr<RootObject> root, const QVariant& variant, JSValueRef *exception)
Run Code Online (Sandbox Code Playgroud)
以及其中的这段代码:
if (type == QMetaType::QByteArray) {
QByteArray qtByteArray = variant.value<QByteArray>();
WTF::RefPtr<WTF::Uint8ClampedArray> wtfByteArray = WTF::Uint8ClampedArray::createUninitialized(qtByteArray.length());
memcpy(wtfByteArray->data(), qtByteArray.constData(), qtByteArray.length());
ExecState* exec = toJS(context);
APIEntryShim entryShim(exec);
return toRef(exec, toJS(exec, static_cast<JSDOMGlobalObject*>(exec->lexicalGlobalObject()), wtfByteArray.get()));
}
Run Code Online (Sandbox Code Playgroud)
这似乎是QByteArrayJS端对a的处理。
我还相信,通过从 Qt WebKit 迁移到 Qt WebEngine,Qt 现在使用V8,而之前是WebCore 和 JavaScript Core(来源:此线程)。所以,事情可能已经改变了,但我不知道改变到什么程度。
目前,我无法在 Qt 源代码中进一步搜索 Qt5.6,因此我无法提供真正的答案,但我希望这会激励您或其他任何人研究它并澄清这种行为: -)。
| 归档时间: |
|
| 查看次数: |
585 次 |
| 最近记录: |