2020年5月11日月曜日

WKWebView で UserAgent を設定する方法

概要

WKWebView で既存の UserAgent を取得してそれを書き換えて UserAgent を変更する方法を紹介します

環境

  • macOS 10.15.4
  • Xcode 11.4.1 (11E503a)

サンプルコード

WKWebView は WebKit が必要になるので最初に import します

import WebKit

あとは WKWebView を作成して UserAgent を設定します
既存の UserAgent を取得するには evaluateJavaScript を使って JavaScript を発行し内部のブラウザから UserAgent の情報を取得します
あとは取得した文字列情報の UserAgent を replace などを使って書き換えます

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
  var webView: WKWebView? = WKWebView()
  webView!.evaluateJavaScript("navigator.userAgent", completionHandler: { (result, error) in
      webView = nil
      guard let ua = result as? String else {
          return
      }
      let customUserAgent = ua.replacingOccurrences(of: "iPad", with: "iPhone")
      let dic: NSDictionary = ["UserAgent" : customUserAgent]
      UserDefaults.standard.register(defaults: dic as! [String : AnyObject])
  })
}

上記は iPad 用の UserAgent を iPhone の UserAgent に書き換えています

UserAgent の情報は UserDefaults.standard.register を使って登録します
この方法にすることでアプリ全体で使用する UserAgent を設定することになるので再度設定の必要がなくなります
なので実行する場合は didFinishLaunchingWithOptions など初期化の際に一度だけ実行されるメソッド内で行うとよいでしょう

逆に毎回 UserAgent を変更したい場合は WKWebView.customUserAgent を使ってください

0 件のコメント:

コメントを投稿