为多个 UIWebView 设置不同的 User-Agent

Set different User-Agents for multiple UIWebViews

我的应用程序有 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 并相应地加载,但有时我的应用程序需要同时加载两个 UIWebView,一个移动设备,一个桌面。

有什么方法可以设置特定于所述 UIWebView 的 UIWebView 的用户代理?

我假设这将涉及调配 NSUrlRequest 方法或其他什么?我对那些东西知之甚少

如果可能的话,简单的方法是只使用 WKWebView 而不是 UIWebView。 WKWebView 在 class 本身(.customUserAgent、iOS9+)上将用户代理字符串公开为 属性。作为额外的好处,视图中的 JavaScript 代码 运行 会更快并且使用更少的电池电量,因为 JavaScript 可以预编译为本机代码。

就是说,如果您出于某种原因必须坚持使用 UIWebView,您可以创建一个 NSURL 协议来拦截您应用程序的所有 HTTP 请求并根据 [=19] 中的主机名更改字段=].苹果网站上有一些 NSURL 协议的例子。从那里开始并根据需要进行调整。