Qt 5.12.4 中 addToJavaScriptWindowObject 的替代方案
Alternative of addToJavaScriptWindowObject in Qt 5.12.4
我正在尝试将我的代码从 QWebView 迁移到 QWebEngine。我想将代码中的一个对象添加到 java 脚本中。在 QWebView 中,可以使用函数 addToJavaScriptWindowObject。我们如何在 QWebEngine 中做到这一点。
webview->page()->mainFrame()->addToJavaScriptWindowObject("qtObject",this);
我们的java脚本需要调用"qtObject"的函数。
QFile webChannelJsFile(":/qtwebchannel/qwebchannel.js");
if (!webChannelJsFile.open(QIODevice::ReadOnly)) {
qDebug() << QString("Couldn't open qwebchannel.js file: %1").arg(webChannelJsFile.errorString());
}
else {
qDebug() << "OK webEngineProfile";
QByteArray webChannelJs = webChannelJsFile.readAll();
webChannelJs.append(
"\n"
"var qtObject"
"\n"
"new QWebChannel(qt.webChannelTransport, function(channel) {"
" qtObject = channel.objects.qtObject;"
"});"
);
QWebEngineScript script;
script.setName("qwebchannel.js");
script.setInjectionPoint(QWebEngineScript::DocumentCreation);
script.setRunsOnSubFrames(false);
script.setWorldId(QWebEngineScript::MainWorld);
script.setSourceCode(webChannelJs);
page->scripts().insert(script);
QWebChannel *channel = new QWebChannel(page);
channel->registerObject("qtObject", this);
page->setWebChannel(channel);
return page;
我正在尝试将我的代码从 QWebView 迁移到 QWebEngine。我想将代码中的一个对象添加到 java 脚本中。在 QWebView 中,可以使用函数 addToJavaScriptWindowObject。我们如何在 QWebEngine 中做到这一点。
webview->page()->mainFrame()->addToJavaScriptWindowObject("qtObject",this);
我们的java脚本需要调用"qtObject"的函数。
QFile webChannelJsFile(":/qtwebchannel/qwebchannel.js");
if (!webChannelJsFile.open(QIODevice::ReadOnly)) {
qDebug() << QString("Couldn't open qwebchannel.js file: %1").arg(webChannelJsFile.errorString());
}
else {
qDebug() << "OK webEngineProfile";
QByteArray webChannelJs = webChannelJsFile.readAll();
webChannelJs.append(
"\n"
"var qtObject"
"\n"
"new QWebChannel(qt.webChannelTransport, function(channel) {"
" qtObject = channel.objects.qtObject;"
"});"
);
QWebEngineScript script;
script.setName("qwebchannel.js");
script.setInjectionPoint(QWebEngineScript::DocumentCreation);
script.setRunsOnSubFrames(false);
script.setWorldId(QWebEngineScript::MainWorld);
script.setSourceCode(webChannelJs);
page->scripts().insert(script);
QWebChannel *channel = new QWebChannel(page);
channel->registerObject("qtObject", this);
page->setWebChannel(channel);
return page;