本文へスキップ

新しいiOS WebViewのご紹介

2分間の読書
Facebookソフトウェアエンジニア

長らく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への切り替え時に問題が発生する可能性があります。当面の間、これらのプロパティの使用は避けることをお勧めします。

不整合な動作

automaticallyAdjustContentInsetscontentInsets (コミット)

WKWebViewにcontentInsetsを追加しても、WKWebViewのビューポートは変わりません。ビューポートはフレームと同じサイズのままです。UIWebViewでは、ビューポートのサイズが実際に変化します(コンテンツインセットが正の場合、小さくなります)。

backgroundColor (コミット)

WebViewの新しいiOS実装では、このプロパティを使用すると、背景色がちらつく可能性があります。さらに、WKWebViewは、UIWebviewとは異なる方法で透明な背景をレンダリングします。詳細については、コミットの説明をご覧ください。

サポート対象外

scalesPageToFit (コミット)

WKWebViewはscalesPageToFitプロパティをサポートしていなかったため、WebView React Nativeコンポーネントでこれを実装できませんでした。