iOS 13 WebKit の変更点
WKWebpagePreferences
WKWebpagePreferences
クラスが追加された。
既存では WKPreferences
というクラスが WKWebView
全体の設定クラスとして用意されている。
新たに追加された WKWebpagePreferences
は基本的にはページ単位での設定クラスになる。
どういった設定ができるのかドキュメントを見てみると
WKWebpagePreferences - WebKit | Apple Developer Documentation
現状できる事は WKWebpagePreferences.ContentMode
の設定のみ。
Webページの表示をデスクトップ表示するかモバイル表示するか推奨表示を利用するかを選択する事しかできない模様。
enum ContentMode : Int { case desktop case mobile case recommended }
WKWebpagePreferences.ContentMode - WKWebpagePreferences | Apple Developer Documentation
使用方法
WKWebViewConfiguration
を用いて WKWebView
の全体設定としてデフォルトでどのモードで表示するかを設定する事ができる。
@NSCopying var defaultWebpagePreferences: WKWebpagePreferences! { get set }
defaultWebpagePreferences - WKWebViewConfiguration | Apple Developer Documentation
また、WKNavigationDelegate
を利用して表示するページ毎にダイナミックに設定を変更する事もできる。
optional func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, preferences: WKWebpagePreferences, decisionHandler: @escaping (WKNavigationActionPolicy, WKWebpagePreferences) -> Void)
iOS だけではなくて macOS でも利用可能なAPIなのでMacアプリでモバイルサイトの表示という事もできてしまいそうではあるが、実際にAPIを試してみたところ
- iOSアプリでデスクトップ表示は可能
- Macアプリでモバイル表示の設定はなぜか反映されず*1
という結果になった。(理由は不明)
またサイトによってはおそらくレスポンシブデザインでウィンドウ幅を基準に表示を表示を変えていたり、UserAgent を基準に表示を変えていたりしているため、この WKWebpagePreferences
による表示切り替えが効かない場合もあった。
対応サイトでのみ有効という感じになりそう。
WKSnapshotConfiguration
スクリーンショットを撮る時の設定に afterScreenUpdates
のオプションが追加された。
var afterScreenUpdates: Bool { get set }
afterScreenUpdates - WKSnapshotConfiguration | Apple Developer Documentation
WebKit の大まかな変更点は以上2つ
あとはエラーコードの追加のみ
WKError - WebKit | Apple Developer Documentation
*1:macOS アプリで WKWebView を使う場合は Capabilities > Sandbox > Outgoing Connection (Client) を有効にしないと通信できないので検証の際には注意