今日は Swift の WKWebView
についてです。
UIWebView
が非推奨になったので、以前開発したアプリを WKWebView
を使用するように修正していたところ、UserAgent の処理で躓いたので備忘録としてまとめます。
今回、UserAgent の変更にあたり、参考にさせていただいた記事はこちら。
[Swift]WKWebViewのUserAgentに追記をする|杏z学習帳
https://blog.anzfactory.xyz/articles/20190902/swift-wkwebview-custom-useragent/
なお、UserAgent とは、Webページを閲覧する際に、ブラウザがサーバーに自動送信している情報のことで、ブラウザの種類やバージョン、OS の種類やバージョンなどの情報が送信されています。
が、今回の記事にもある通り、結構容易に変更が可能なので、必ずしも正しい情報とは言えません。
さて方法ですが、個人的に分かりやすかった書き方が 2種類があります。
まず、1つめがこちら。
var webView: WKWebView? = WKWebView() webView?.evaluateJavaScript("navigator.userAgent") { (userAgent, error) in // nil を代入しておかないと、error が代入され userAgent が nil になってしまう webView = nil let newUserAgent = userAgent! as! String + "[追加したい情報]" UserDefaults.standard.register(defaults: [ "UserAgent": newUserAgent ]) }
2行目の、evaluateJavaScript
で JavaScript の navigator.userAgent
を実行し、UserAgent を取得します。
取得が成功したら、そこに追加したい情報を追加し、7行目の UserDefaults.standard.register
で UserAgent を上書きしています。
こちらでも問題なさそうですが、evaluateJavaScript
で実行する処理が非同期なので、少しめんどくさいとのことでした。
なので、本命はこちらです。
let config = WKWebViewConfiguration() config.applicationNameForUserAgent = [追加したい情報] let webview = WKWebView(frame: .zero, configuration: config)
1行目の WKWebViewConfiguration()
で現在の UserAgent を取得してから、2行目で、追加したい UserAgent を指定しています。
デフォルトの情報はそのままで、追加したい UserAgent を追記していってくれますので、文字列の結合を考えなくて済みます。
なによりコードがすっきりしているので、とても分かりやすいです。
もちろん、こちらを採用させていただきました。
アプリ実行後、UserAgent を確認したところ、無事、追加したい情報が追記されておりました!
ちなみに、UserAgent の確認方法ですが、Safari の検証ツールを使う方法の他にも、Swift で下記のコードを実行する方法もあります。
var webView: WKWebView? = WKWebView() webView.evaluateJavaScript("navigator.userAgent") { (userAgent, error) in // nilを代入しておかないと、errorが代入されuserAgentがnilになってしまう webView = nil print(userAgent) }
こちらの処理は、下記の記事を参考にさせていただきました。
【WKWebView】UserAgentの取得方法 – Qiita
https://qiita.com/pon_y_z/items/8849edbc53f1fe11bef8
当然ですが、UserAgent の追記処理の後で実行してください。
以上、Swift のWKWebView で UserAgent を変更する方法でした。
ご参考になれば幸いです。