跳到主要內容

介紹新的 iOS WebViews

·2 分鐘閱讀
Facebook 軟體工程師

長期以來,Apple 一直不鼓勵使用 UIWebView,而傾向使用 WKWebView。在即將在未來幾個月發布的 iOS 12 中,UIWebView 將被正式棄用。React Native 的 iOS WebView 實作嚴重依賴 UIWebView 類別。因此,鑑於這些發展,我們為 WebView React Native 組件建構了一個新的原生 iOS 後端,該後端使用 WKWebView。

這些變更的尾聲已在 此提交 中完成,並將在 0.57 版本中提供。

若要選擇加入此新實作,請使用 useWebKit 屬性

<WebView
useWebKit={true}
source={{url: 'https://www.google.com'}}
/>

改進

UIWebView 沒有合法的方式來促進在 WebView 中執行的 JavaScript 與 React Native 之間的通訊。當訊息從 WebView 傳送時,我們依賴一種駭客手法將它們傳遞到 React Native。簡而言之,我們將訊息資料編碼到具有特殊架構的 URL 中,並將 WebView 導航到該 URL。在原生端,我們攔截並取消此導航,從 URL 解析資料,最後呼叫到 React Native。此實作容易出錯且不安全。我很高興宣布,我們已利用 WKWebView 功能完全取代它。

WKWebView 相較於 UIWebView 的其他優點包括更快的 JavaScript 執行速度和多進程架構。請參閱此 2014 年 WWDC 以了解更多詳細資訊。

注意事項

如果您的組件使用以下屬性,那麼在切換到 WKWebView 時,您可能會遇到問題。目前,我們建議您避免使用這些屬性

行為不一致

automaticallyAdjustContentInsetscontentInsets (提交)

當您將 contentInsets 新增到 WKWebView 時,它不會變更 WKWebView 的視口。視口大小與框架大小保持不變。使用 UIWebView,視口大小實際上會變更(如果內容內邊距為正數,則會變小)。

backgroundColor (提交)

使用 WebView 的新 iOS 實作,如果您使用此屬性,您的背景顏色可能會閃爍顯示。此外,WKWebView 呈現透明背景的方式與 UIWebView 不同。請查看提交描述以了解更多詳細資訊。

不支援

scalesPageToFit (提交)

WKWebView 不支援 scalesPageToFit 屬性,因此我們無法在 WebView React Native 組件上實作此屬性。