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



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

我发现真正令人困惑的是,有多个类具有相似的名称,但并不能在所有平台上工作,或者缺乏一些必要的功能。

以下是我找到的选项:


选项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文件没有成功。(wtf ?)


选项3:WebEngineView (QtWebEngine 1.0)

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

优点:

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

缺点:

  • 在main()中调用QtWebEngine::initialize()
  • 要求我在.pro文件中手动添加webengineQT。这使得它在OS X上构建/发布,但仍然不能在iOS上运行。Wtf ?
  • 不能在iOS上运行:

QQmlApplicationEngine加载组件失败http://badkitteh.local:8888/backend/:6模块"QtWebEngine"未安装


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

这是令人沮丧的。

我如何获得一个简单的基于WebView的社交登录跨iOS和Android的应用程序内工作,而不使用外部库/工具等?要么我在这里错过了一些东西,要么WebView的情况对于QML/Qt来说现在真的很混乱。为什么有这么多选择?为什么在iOS和Android上没有简单的UIWebView包装器?

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

相关内容

  • 没有找到相关文章

最新更新