42463


モバイル端末とPC端末で表示が異なるWebサイトをWKWebViewを用いて開きましたが、アクセス元がモバイル端末なので当然モバイルサイトがでてきてしまいます  
これをPC用のサイトを開くようなふるまいにしたいのです  
そこでUser-Agentを偽装しようと  
AppDelegateの didFinishLaunchingWithOptionsに

[code]

    UserDefaults.standard.set("UserAgent" , forKey:"PC Agent")
    
[/code]

”PC Agent”はPCから取得したUser-Agentです

としてみましたが結果は変わらず、皆様のお力添えをお願いしたいと思い質問いたしました  
よろしくお願いします

環境は  
Xcode9.2  
Swift4.0  
iOS11.1  
iPhone X  
です

追記  
コード中にあるUserAgentを調べるWebサイトをWKwebViewで開きcustomUserAgentが変更されているか否かを確認しています  
以下のコードでUserAgentの変更を確認しました

[code]

    import UIKit
    import WebKit
    
    class ViewController: UIViewController {
    
    // adjust SafeArea top space
    // portrait のみを想定
    var topPadding:CGFloat = 0
    
    override func viewDidAppear(_ animated: Bool){
    
        print("viewDidAppear")
    
        let screenWidth:CGFloat = view.frame.size.width
        let screenHeight:CGFloat = view.frame.size.height
    
        // iPhone X , X以外は0となる
        if #available(iOS 11.0, *) {
            let window = UIApplication.shared.keyWindow
            topPadding = window!.safeAreaInsets.top
        }
    
        // Webページの大きさを画面に合わせる,横画面
        let rect = CGRect(x: topPadding,
                          y: 0,
                          width: screenWidth - topPadding,
                          height: screenHeight)
    
        let webConfiguration = WKWebViewConfiguration()
        var webView = WKWebView(frame: rect, configuration: webConfiguration)
        let userAgentStr = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146"
        webView.customUserAgent = userAgentStr
    
        let webUrl = URL(string: "https://www.baka-ke.com/lab/useragent.php")!
        let myRequest = URLRequest(url: webUrl)
        webView.load(myRequest)
    
        // インスタンスをビューに追加する
        view.addSubview(webView)
    }
    }
    
[/code]


CC BY-SA 3.0
2018-03-17T17:25:32.030
42461
2018-03-19T11:48:15.493
2018-03-19T11:48:15.493
27784
27784
question
swift xcode webview
WKWebViewのUser-Agent偽装方法について


ずいぶん古い記事を参考にされたのでしょうか?

iOS9以降であれば`WKWebView`に[`customUserAgent`というプロパティ](https://developer.apple.com/documentation/webkit/wkwebview/1414950-customuseragent)が追加されています。`WKWebView`のインスタンスを生成した直後に値を設定してください。

[code]

    let webView = WKWebView()
    webView.customUserAgent = "PC Agent"
    
[/code]

* * *

(追記のコードについて)

コメント中に書いた「リクエストを送信しているWKWebViewとcustomUserAgentを設定したWKWebViewが異なる」のパターンですね。あなたのコードでは、`WKWebView`のインスタンスを2回作っています。

[code]

    class ViewController: UIViewController {
    
    var webView: WKWebView!
    
    // adjust SafeArea top space
    // portrait のみを想定
    var topPadding:CGFloat = 0
    
    override func viewDidAppear(_ animated: Bool){
        //↓ここで`WKWebView`のインスタンスを作って、`customUserAgent`を設定している
        webView = WKWebView()
        let userAgentStr = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146"
        webView.customUserAgent = userAgentStr
    
        print("viewDidAppear")
    
        //...
    
        let webConfiguration = WKWebViewConfiguration()
        //↓ここでもう一度`WKWebView`のインスタンスを作っている、さっき`customUserAgent`を設定した`WKWebView`は捨てられる
        webView = WKWebView(frame: rect, configuration: webConfiguration)
    
        let webUrl = URL(string: "https://www.baka-ke.com/lab/useragent.php")!
        let myRequest = URLRequest(url: webUrl)
        webView.load(myRequest)
    
        // インスタンスをビューに追加する
        view.addSubview(webView)
    }
    
[/code]

例えば、あなたの`viewDidLoad()`を以下のように修正してみてください。

[code]

    override func viewDidAppear(_ animated: Bool){
        print("viewDidAppear")
    
        let screenWidth:CGFloat = view.frame.size.width
        let screenHeight:CGFloat = view.frame.size.height
    
        // iPhone X , X以外は0となる
        if #available(iOS 11.0, *) {
            let window = UIApplication.shared.keyWindow
            topPadding = window!.safeAreaInsets.top
        }
    
        // Webページの大きさを画面に合わせる,横画面
        let rect = CGRect(x: topPadding,
                          y: 0,
                          width: screenWidth - topPadding,
                          height: screenHeight)
    
        let webConfiguration = WKWebViewConfiguration()
        webView = WKWebView(frame: rect, configuration: webConfiguration)
        //`WKWebView`のインスタンスを生成した直後に値を設定
        let userAgentStr = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146"
        webView.customUserAgent = userAgentStr
    
        let webUrl = URL(string: "https://www.baka-ke.com/lab/useragent.php")!
        let myRequest = URLRequest(url: webUrl)
        webView.load(myRequest)
    
        // インスタンスをビューに追加する
        view.addSubview(webView)
    }
    
[/code]

回答内容を自分のコードに合わせて読み替えるというのは少しハードルが高いのかもしれませんが、「`WKWebView`のインスタンスを生成した直後に値を設定してください。」という記述の後に`let
webView =
WKWebView()`というコードをお示ししたのは、「この行をあなたのコードの中で`WKWebView`のインスタンスを生成している部分に置き換えて読んでください」という意味だったりします。(そう読めなければダメという意味ではありません。こんな表現なら意図がより伝わりやすくなると思う、と言ったご提案があればお教えください。)

ご提案についてはまた気が向いた時で結構ですので、修正版のコードの方、お試し下さい。


CC BY-SA 3.0
2018-03-18T01:11:56.563
42463
2018-03-19T11:45:25.427
2018-03-19T11:45:25.427
13972
13972
42461
answer