WebView の UserAgent を取得設定する iOS 9対応
UserAgent の取得
UIWebView
では
stringByEvaluatingJavaScriptFromString:
メソッドで JavaScript を実行して UserAgent を取得できる。
iOS 8以降の WKWebView
では evaluateJavaScript:completionHandler:
メソッドで JavaScript を実行して UserAgent を取得できる。
WKWebView
の JavaScript は非同期で実行される。
UserAgent の設定
iOS 8までは UIWebView
WKWebView
共に NSUserDefaults
のデフォルト値に UserAgent の値を書き込んでからインスタンスを作るというちょっとトリッキーな事をする必要があった。
iOS 9以降では WKWebView
に公式に UserAgent を変更するメソッドが提供された。
WKWebViewConfiguration で UserAgent の一部をカスタマイズ
iOS 9で WKWebView
の WKWebViewConfiguration
に applicationNameForUserAgent
というプロパティが追加された。
@property (nullable, nonatomic, copy) NSString *applicationNameForUserAgent NS_AVAILABLE(10_11, 9_0);
この値はデフォルトでは UserAgent の最後の部分
Mozilla/5.0 (iPhone; CPU iPhone OS 9_0 like Mac OS X) AppleWebKit/601.1.32 (KHTML, like Gecko) Mobile/13A4254v
の
Mobile/13A4254v
の部分を指し示す。
configuration を作成して applicationNameForUserAgent を設定し、WebView を初期化する際の引数に指定すれば WebView の元々の UserAgent の一部だけを変更する事ができる。
上記のコードでは元々の UserAgent の
Mozilla/5.0 (iPhone; CPU iPhone OS 9_0 like Mac OS X) AppleWebKit/601.1.32 (KHTML, like Gecko) Mobile/13A4254v
が
Mozilla/5.0 (iPhone; CPU iPhone OS 9_0 like Mac OS X) AppleWebKit/601.1.32 (KHTML, like Gecko) ApplicationName
に変更される。
なお WKWebView
に customUserAgent を設定していると WKWebViewConfiguration
の applicationNameForUserAgent は無視され、customUserAgent で設定した値そのままが UserAgent になる。