繁体   English   中英

如何使用 QML 在 iOS 和 Android 上[以正确的方式]显示网页内容

[英]How to display web content [the right way] on iOS and Android using QML

我想使用 Qt 5.5 在 iOS 和 Android 上开发和发布 Qt/QML 应用程序,并且我正在尝试找出一种在我的 QML 应用程序中显示简单 Web 内容(如 Facebook 登录页面)的方法。

我发现真正令人困惑的是,有多个类具有相似的名称,但并不适用于所有平台或缺少某些必需的功能。

这是我发现的选项:


选项 1: WebView (QtWebView 1.0)

http://doc.qt.io/qt-5/qml-qtwebengine-webengineview.html

优点:

  • 适用于 iOS
  • 适用于 Mac OS X

缺点:

  • 不能将它用于社交登录,因为我们缺少“将要加载 URL”信号,我们可以用它来捕获成功的登录/错误。

选项 2: WebView (QtWebKit 3.0)

http://doc.qt.io/qt-5/qml-qtwebkit-webview.html

优点:

  • 显然具有捕获社交登录所需的功能( onNavigationRequested(request)
  • 适用于 OS X

缺点:

  • 不适用于 iOS。 尝试为 iOS 模拟器构建时,我得到:

QQmlApplicationEngine 无法加载组件http://badkitteh.local:8888/backend/:6模块“QtWebKit”未安装

我尝试将webkitwebkitwidgets添加到.pro文件中,但没有成功。 (哇?)


选项 3: WebEngineView (QtWebEngine 1.0)

http://doc.qt.io/qt-5/qml-qtwebengine-webengineview.html

优点:

  • 适用于 OS X。
  • 显然具有捕获社交登录/错误所需的方法( loadingChanged(loadRequest) )。

缺点:

  • 需要在 main() 中调用QtWebEngine::initialize() ()。
  • 需要我在 .pro 文件中手动将webengine添加到QT 这使它在 OS X 上构建/启动,但仍然不在 iOS 上。 哇?
  • 不适用于 iOS:

QQmlApplicationEngine 无法加载组件http://badkitteh.local:8888/backend/:6模块“QtWebEngine”未安装


我还没有测试 Android,但似乎QtWebView是唯一可以跨多个平台工作而不必使用单独的 QML 文件的东西。 不幸的是,无法捕获 URL 更改/加载请求。

这令人沮丧。

如何在不使用外部库/工具等的情况下获得基于WebView的简单社交登录,以便跨 iOS 和 Android 在应用程序中工作? 要么我在这里遗漏了一些东西,要么现在 QML/Qt 的WebView情况真的很糟糕。 为什么有这么多选择? 为什么在 iOS 和 Android 上没有UIWebView简单包装器?

我不知道你到底想完成什么,但 QtWebView(移动设备上的唯一选项)确实有一个 runJavaScript 函数,你可以用它来将一些 JavaScript 注入网页,然后中继 JavaScript 的结果回到回调函数(QML 函数)。 注入的 JavaScript 可以在页面中设置您想要的任何事件侦听器,或者如果您想轮询更改,您可以执行 window.setTimeout。 这有点令人费解,但您可能可以通过这种方式破解出一个解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM