如何设置QWebChannel JS API以在QWebEngineView中使用?

时间:2016-09-22 22:24:45

标签: javascript c++ qt

由于Qt的文档还远未完成,这是设置QWebChannel的方法,与在文档中推荐的HTML页面中添加<script>标记有什么不同?

1 个答案:

答案 0 :(得分:7)

可以使用不同的选项加载可在URL qrc:///qtwebchannel/qwebchannel.js访问的所需脚本:

<强>注意:

  • 如果您在QWebEngineView中查看页面,则只能使用该URL。否则,您可能需要将API文件加载到您的网络服务器。

<强>先决条件:

  • QT += webchannel添加到您的.pro文件并运行qmake

使用runJavaScript()在Qt的QWebChannel JS API中执行代码:

我喜欢的方法,因为它看起来很简单,到目前为止一直很可靠。 请记住,在此代码完成时可能无法设置API,因为runJavaScript()方法在JS代码执行之前不会阻止当前线程。

QFile apiFile(":/qtwebchannel/qwebchannel.js"); //load the API from the resources
if(!apiFile.open(QIODevice::ReadOnly))
    qDebug()<<"Couldn't load Qt's QWebChannel API!";
QString apiScript = QString::fromLatin1(apiFile.readAll());
apiFile.close();
QWebEngineView view;    //your custom QWebEngineView
view.page().runJavaScript(apiScript);

使用runJavaScript()执行代码来加载Qt的QWebChannel JS API:

虽然我没有尝试这些方法,但它们仍然可以工作,因为它们的目的是加载外部JS文件。 建议here之一的方法可能会派上用场,具体取决于您使用的其他库。

在网页中使用<script>标记:

这是Qt文档推荐的默认方法。它的优点是在页面加载后立即提供API。 这样做的缺点是,如果您不是网站的所有者,则需要修改网页的HTML,这可能很痛苦。

不要忘记在C ++端创建一个QWebChannel对象:

QWebChannel* channel_ = new QWebChannel(view.page());
//attach it to the QWebEnginePage
view.page()->setWebChannel(channel_);
//register a QObject to be exposed to JavaScript
channel_->registerObject(QStringLiteral("jshelper"), this);

这个答案被认为是对Qt文档的补充,所以如果你想添加一些东西,请随意这样做。

版本:Qt 5.6.1

来源: