web-dev-qa-db-ja.com

WKWebviewでユーザーエージェントを設定する

WKWebViewでカスタムユーザーエージェント文字列を設定するにはどうすればよいですか?サーバー側で利用可能な機能を確認できるように、アプリのバージョンを埋め込みます。私は次の方法を見つけました:

let userAgent = "MyApp/1.33.7"
request.setValue(userAgent, forHTTPHeaderField: "User-Agent")

NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) {(response, data, error) in
    let content = NSString(data: data, encoding: NSUTF8StringEncoding)
    self.web!.loadHTMLString(content!, baseURL: url)
}
self.web!.loadRequest(request);

ただし、これは、useragentがその単一の要求に対してのみ設定されることを意味します。最初のその他のリクエスト(例:転送)は、ユーザーエージェントが再びデフォルトにリセットされることを意味します。カスタムuseragent文字列を使用するようにwkwebviewをより恒久的に構成するにはどうすればよいですか?

32
Pvel

WKWebViewiOS 9およびOSX 10.11customUserAgentプロパティを取得したことを聞いてうれしいです

例:

wkWebView.customUserAgent = "your agent" 
60
Erik Aigner

カスタムユーザーエージェント

カスタムユーザーエージェントを設定するには、customUserAgentプロパティを使用できます。

let webConfiguration = WKWebViewConfiguration()
let webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.customUserAgent = "ExampleApp/1.0 (iPhone)"

利用可能:iOS 9以降

デフォルトのユーザーエージェントに追加する

デフォルトのユーザーエージェントにカスタム文字列を追加するには、applicationNameForUserAgentプロパティを使用できます。

let webConfiguration = WKWebViewConfiguration()
webConfiguration.applicationNameForUserAgent = "ExampleApp/1.0 (iPhone)"
let webView = WKWebView(frame: .zero, configuration: webConfiguration)

次に、次のようになります。

Mozilla/5.0 (iPhone; CPU iPhone OS 11_2 like Mac OS X) AppleWebKit/604.4.7
(KHTML, like Gecko) ExampleApp/1.0 (iPhone)
                    ^^^^^^^^^^^^^^^^^^^^^^^

利用可能:iOS 9以降

5
Marián Černý

WKWebView Swift 3例:

let userAgentValue = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/603.2.4 (KHTML, like Gecko) Version/10.1.1 Safari/603.2.4"
webView.customUserAgent = userAgentValue

StoryboardまたはInterface Builderを使用してこれを行おうとする人への注意:残念ながら、Xcodeは現在、Storyboards(Xcodeバージョン8.3.2)でWKWebViewの使用をサポートしていないため、Webビューを手動で追加する必要がありますコード。

UIWebView Swift 3例:

UserDefaults.standard.register(defaults: ["UserAgent": userAgentValue])
0
Alex

Swift 3の場合、カスタムuserAgentを使用するアプリ全体が必要です。AppDelegateでの私のソリューションです。UIWebviewの使用は、WKWebViewConfiguration、userAgent文字列のみが必要なため

 fileprivate func setupGlobalWebviewUserAgent() {

    let webview = UIWebView()
    var newUserAgent = webview.stringByEvaluatingJavaScript(from: "navigator.userAgent")
    newUserAgent = newUserAgent?.appending("custom user agent")
    let dictionary = Dictionary(dictionaryLiteral: ("UserAgent", newUserAgent))
    UserDefaults.standard.register(defaults: dictionary)
}
0
Stephen Chen