- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
由于 Qt 的文档远未完成,这是设置 QWebChannel 的方法以及与添加 <script>
不同的方法吗?像文档中推荐的那样在 HTML 页面中标记?
最佳答案
有不同的选项可以加载可在 URL qrc:///qtwebchannel/qwebchannel.js
访问的所需脚本。 :
注意事项:
先决条件:
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/
无论好坏,我都在探索使用 QWebChannel 作为创建网络视频游戏的方法。我遇到了一个问题,当 new.clients 加入时,他们会收到最初的游戏状态,而没有其他客户端所做的任何增量更改。 查看
基于 QT QWebEnginePage::setWebChannel() transport object和 Qt: Cannot invoke shared object methods/prop
我有一个 QWebEngineView 加载类似 http://google.com 的页面我想将键盘加载到输入框,所以我应该使用 QWebChannel 和 WebEngineScript。我为 w
我正在使用 Qt 和 html 中的 UI 开发适用于 Android/iOs/Windows 的应用程序。当我尝试从我的 html 到 JavaScript 进行通信时,它很好,但是当我尝试从 JS
我有一个使用 QWebChannel 创建谷歌地图实例的小部件。在 javascript 中实例化 QWebChannel 时会出现几个警告: Property 'accessibleName'' o
我使用带有 WebChannel 的 QT 5 与 HTML 页面进行通信。我成功地能够传达文本和字符串。但是我想传达一些积分数据。 官方文档说 "No manual message passing
我正在使用新的 WebEngine 来玩耍和学习。我一直在尝试使用 Qt WebKit 找到一些类似的方法:addToJavaScriptWindowObject() 我发现使用Qt WebEngin
我已经通过 PyQt5 在 Python 中构建了一个 GUI。我正在展示一个带有谷歌地图页面的网络浏览器。用户应该移动标记,我的程序应该处理标记的坐标。因此我必须将坐标从 JS 传递到 Python
一旦 html 输入字段聚焦在显示 QWebEngineView 上,我想在触摸屏上显示自定义输入设备。 。因此我尝试通过 QWebChannel 公开输入设备对象到客户端 Javascipt,一旦输
使用 QWebChannel 从 QtWebKit 迁移到 QtWebEngine。 我有一个可调用函数,它向 Javascript 发送一个 QVariant 对象,它被视为一个 JSON 对象。所
我使用 QWebChannel 在 Qt 中实现了一个 HTML 包装器,并且我能够成功地发送字符串,但是,我想发送一个 QJsonObject,而不是像“{a:1,b:2}”这样的 json 字符串
QtWebEngine 使用 IPC 机制在 C+ Qt 世界和 JavaScript 工作之间进行通信。这种机制用于 QWebChannel,它似乎是基于 WebSockets 的。有没有一种方法可
我正在编写一个 C++ QWidget 应用程序,它与资源托管网页中运行的 JavaScript 进行通信。我需要找到一种方法将以下 POD 结构的数组发送到网页中托管的 JavaScript 函数,
由于 Qt 的文档远未完成,这是设置 QWebChannel 的方法以及与添加 不同的方法吗?像文档中推荐的那样在 HTML 页面中标记? 最佳答案 有不同的选项可以加载可在 URL qrc:///
我在我的应用程序和 WebEngine 之间创建了网络 channel ,以便在 JavaScript 中在网络端公开 QObject 但 channel 在页面重新加载后丢失,或者如果我单击链接到另
我是一名优秀的程序员,十分优秀!