gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:13:27 25 4
gpt4 key购买 nike

由于 Qt 的文档远未完成,这是设置 QWebChannel 的方法以及与添加 <script> 不同的方法吗?像文档中推荐的那样在 HTML 页面中标记?

最佳答案

有不同的选项可以加载可在 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);

在 JavaScript 代码上设置 QWebChannel:

正如评论中所指出的,为了在 C++ 和 JavaScript 之间共享对象,您需要初始化 QWebChannel。

new QWebChannel(qt.webChannelTransport, function (channel) {
var sharedObject = channel.objects.sharedObject;
});

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

版本:Qt 5.6.1

来源:

关于javascript - 如何设置 QWebChannel JS API 以在 QWebEngineView 中使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39649807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com