我想在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"未安装
我尝试添加webkit
和webkitwidgets
到.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文件中手动添加
webengine
到QT
。这使得它在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。这有点复杂,但你可以通过这种方式找出一个解决方案。