加载桌面版WKWebView iOS 9

时间:2015-10-30 10:47:40

标签: swift http-headers ios9 wkwebview

直到最近

let url = NSURL (string:http://asite.com)        
let request = NSMutableURLRequest(URL: url!)         

//iOS loads the mobile version of asite.com which does not have the required DOM so we force the desktop version by setting new value forHTTPHeadrField
let newUserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.6 Safari/537.11"

request.setValue(newUserAgent, forHTTPHeaderField: "User_Agent")

let config = WKWebViewConfiguration()        

//even though we dont need to see it the webpage needs to appear but we set its frame to CGRectZero so its hidden from user 

let ghostWebView : WKWebView = WKWebView(frame:CGRectZero, configuration: config)        
ghostWebView.loadRequest(request)

这将强制该网站的桌面版本。然而它刚刚停止工作。不知道确切的时间,但最近。

任何想法为什么?

google结果也显示了一些用途

  

“用户代理”

用于HTTPHeaderField和其他

  

“User_Agent类”

两者之间的区别是什么?

更新: 我通过将用户代理字符串更改为

来解决了该问题
  

“Mozilla / 5.0(Macintosh; Intel Mac OS X 10_10_1)AppleWebKit / 537.36   (KHTML,像Gecko一样)Chrome / 41.0.2227.1 Safari / 537.36“

我从

获得的
  

http://www.useragentstring.com

所以我的新问题是这些用户代理字符串经常更改的频率是否有办法让我的应用程序自动更新到最新版本?

3 个答案:

答案 0 :(得分:3)

斯威夫特4:

@IBOutlet weak var webView: WKWebView!

override func viewDidLoad() {
      super.viewDidLoad()
      self.webView.customUserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/601.6.17 (KHTML, like Gecko) Version/9.1.1 Safari/601.6.17"
}

答案 1 :(得分:1)

通过设置WKWebViewConfiguration的applicationNameForUserAgent属性来解决此问题的一种方法。

默认值为"移动/ 13C75",但您可以使用" Chrome / 23.0.1271.6 Safari / 537.11"进行设置。或只是" Chrome Safari"并且您将获得所请求URL的桌面版本。

WKWebViewConfiguration *wkWebConfig = [[WKWebViewConfiguration alloc] init];    
wkWebConfig.applicationNameForUserAgent = @"Chrome Safari";    
WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectZero
                                        configuration:wkWebConfig];

答案 2 :(得分:0)

帮助任何在这里找到答案的人。 解决方案是

UserDefaults.standard.register(defaults: ["UserAgent" : "Chrome Safari"])