新しいiOS WebViewの導入
長らくAppleはUIWebViewの使用を控え、WKWebViewの使用を推奨してきました。数ヶ月以内にリリースされるiOS 12では、UIWebViewは正式に非推奨となります。React NativeのiOS WebViewの実装は、UIWebViewクラスに大きく依存しています。そのため、これらの進展を受け、WKWebViewを使用するWebView React Nativeコンポーネント用の新しいネイティブiOSバックエンドを構築しました。
これらの変更の最終段階はこのコミットで取り込まれ、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に切り替えると問題が発生する可能性があります。当面の間、これらのプロパティの使用は避けることをお勧めします。
動作の不整合
automaticallyAdjustContentInsets および contentInsets (コミット)
WKWebViewにcontentInsetsを追加しても、WKWebViewのビューポートは変更されません。ビューポートはフレームと同じサイズを維持します。UIWebViewでは、ビューポートのサイズが実際に変更されます(コンテンツインセットが正の場合、小さくなります)。
backgroundColor (コミット)
新しいWebViewのiOS実装では、このプロパティを使用すると、背景色がちらつく可能性があります。さらに、WKWebViewは透明な背景をUIWebviewとは異なる方法でレンダリングします。詳細については、コミットの説明をご覧ください。
非サポート
scalesPageToFit (コミット)
WKWebViewはscalesPageToFitプロパティをサポートしていなかったため、WebView React Nativeコンポーネントではこれを実装できませんでした。