簡體   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