Reputation: 3219
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")!
}
Upvotes: 5
Views: 762
Reputation: 32270
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"
}
Upvotes: 4