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

Bas*_*Ben 6 android webview qml qwebkit qt5

我想在iOS和Android上使用Qt 5.5开发和发布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没有成功的文件.(WTF?)


选项3:WebEngineView(QtWebEngine 1.0)

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

优点:

  • 适用于OS X.
  • 显然有必要的方法来捕获社交登录/错误(loadingChanged(loadRequest)).

缺点:

  • 需要QtWebEngine::initialize()在main()中调用.
  • 需要我手动添加webengineQT.pro文件中.这使得它在OS X上构建/启动但仍然不在iOS上.跆拳道?
  • 在iOS上不起作用:

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


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

这令人沮丧.

我如何WebView在不使用外部库/工具等的情况下获得基于iOS和Android的应用程序内的简单社交登录?要么我在这里遗漏了一些东西,要么现在WebViewQML/Qt 的情况真的搞砸了.为什么有这么多选择?为什么UIWebViewiOS上没有简单的包装器和Android上的等效包装器?

Wal*_*vis 2

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