新しいiOS WebViewのご紹介
長らくAppleは、UIWebViewsの使用をWKWebViewに切り替えるよう推奨してきました。今後数ヶ月でリリースされるiOS 12では、UIWebViewsは正式に非推奨となります。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からデータを解析して、最後にReact Nativeを呼び出しました。この実装はエラーが発生しやすく、安全ではありませんでした。WKWebView
の機能を活用して完全に置き換えたことを発表できることを嬉しく思います。
UIWebViewに対するWKWebViewのその他の利点には、より高速なJavaScript実行とマルチプロセスアーキテクチャがあります。詳細については、この2014 WWDCをご覧ください。
注意点
コンポーネントで次のプロパティを使用している場合、WKWebViewへの切り替え時に問題が発生する可能性があります。当面の間、これらのプロパティの使用は避けることをお勧めします。
不整合な動作
automaticallyAdjustContentInsets
とcontentInsets
(コミット)
WKWebView
にcontentInsetsを追加しても、WKWebView
のビューポートは変わりません。ビューポートはフレームと同じサイズのままです。UIWebView
では、ビューポートのサイズが実際に変化します(コンテンツインセットが正の場合、小さくなります)。
backgroundColor
(コミット)
WebViewの新しいiOS実装では、このプロパティを使用すると、背景色がちらつく可能性があります。さらに、WKWebView
は、UIWebview
とは異なる方法で透明な背景をレンダリングします。詳細については、コミットの説明をご覧ください。
サポート対象外
scalesPageToFit
(コミット)
WKWebViewはscalesPageToFitプロパティをサポートしていなかったため、WebView React Nativeコンポーネントでこれを実装できませんでした。