我的应用程序有UIWebViews,一些加载网站,我需要网站的桌面版本,一些加载网站,我需要网站的移动版本。
所以我将用户代理设置为桌面用户代理或移动用户代理来实现此目的。
例如,如果我想要UIWebView加载网站的桌面版本,我只需在此之前运行此代码:
NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36", @"UserAgent", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];
问题在于,这当然是设置NSUserDefaults变量,这意味着我的应用程序中的任何UIWebView在此之后加载它将使用桌面用户代理。我可以根据需要在桌面和移动设备之间翻转NSUserAgent并相应加载,但有时我的应用程序需要同时加载两个UIWebViews,一个移动设备,一个桌面。
有什么办法可以设置特定于UIWebView的UIWebView的用户代理?
我假设这将涉及调配NSUrlRequest方法或其他什么?我对这些东西知之甚少
答案 0 :(得分:1)
如果可能的话,简单的方法是使用WKWebView而不是UIWebView。 WKWebView将用户代理字符串公开为类本身的属性(.customUserAgent
,iOS9 +)。作为额外的好处,视图中运行的JavaScript代码将更快,并且将使用更少的电池电量,因为JavaScript可以预编译为本机代码。
也就是说,如果由于某种原因你必须坚持使用UIWebView,你可以创建一个NSURLProtocol来拦截你所有应用程序的HTTP请求,并根据URL中的主机名更改字段。在Apple的网站上有一些NSURLProtocol的例子。从那开始并根据需要进行调整。