5

I'm trying to add mobile, desktop version site functionality on my app. But the problem is that User Agent only change at once before webView loading. In my app i add to button one for Mobile and second for Desktop version site. UIWebView pick User Agent just on start.Can anyone tell me is there any way to change User Agent at run time. Thanks

 var defaultUserAgent = String()
    @IBOutlet weak var webView: UIWebView!

    @IBOutlet weak var activityIndicator: UIActivityIndicatorView!

    override func viewDidLoad() {
        super.viewDidLoad()

        let url = NSURL(string: "https://www.youtube.com")
        let request = NSURLRequest(URL: url!)
        activityIndicator.hidesWhenStopped = true
        activityIndicator.startAnimating()
        webView.loadRequest(request)
    }

    @IBAction func mobile(sender: AnyObject) {
        NSUserDefaults.standardUserDefaults().registerDefaults(["UserAgent": defaultUserAgent])
        print(defaultUserAgent)

        let url = NSURL(string: "https://www.youtube.com")
        let request = NSURLRequest(URL: url!)
        activityIndicator.hidesWhenStopped = true
        activityIndicator.startAnimating()
        webView.loadRequest(request)

    }

    @IBAction func desktop(sender: AnyObject) {

        NSUserDefaults.standardUserDefaults().registerDefaults(["UserAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36"])

        let url = NSURL(string: "https://www.youtube.com")
        let request = NSURLRequest(URL: url!)
        activityIndicator.hidesWhenStopped = true
        activityIndicator.startAnimating()
        webView.loadRequest(request)

    }

    func webViewDidFinishLoad(webView: UIWebView) {
        activityIndicator.stopAnimating()
        print(webView.stringByEvaluatingJavaScriptFromString("navigator.userAgent"))
        defaultUserAgent = webView.stringByEvaluatingJavaScriptFromString("navigator.userAgent")!
    }
rmaddy
  • 314,917
  • 42
  • 532
  • 579
ZAFAR007
  • 3,049
  • 1
  • 34
  • 45

1 Answers1

4

I recommend you to use WkWebView instead of UIWebView as it is comparatively more powerfull

WkWebView of iOS 9 has a direct API

 if #available(iOS 9, *) {
            webViewObj.customUserAgent = "customUserAgentValue"
 }
Durai Amuthan.H
  • 31,670
  • 10
  • 160
  • 241
  • Thanks @Durai Amuthan.H I know about this, but due to some reasons i need to use `UIWebView`. Is there any way to achieve this? I'v seen one iOS app that give us same functionality also in iOS 7. – ZAFAR007 Sep 14 '16 at 16:36
  • Basically i need to get and save cookies from webView, I can easily get cookies from `UIWebView`, but too complicated if i use `WkWebView`, like acording to [Stefan Arentz](http://stackoverflow.com/questions/33156567/getting-all-cookies-from-wkwebview). Thats reason why i am using `UIWebView` – ZAFAR007 Sep 14 '16 at 16:45
  • I don't think its complicated in WkWebView.In fact WkWebView provides easy interface to take advantage of WebKit.The learning curve is steep that's all. – Durai Amuthan.H Sep 15 '16 at 09:25
  • I don't know if the [link](http://stackoverflow.com/a/26577303/730807) is related but thought like sharing – Durai Amuthan.H Sep 15 '16 at 09:25