【问题标题】:Set different User-Agents for multiple UIWebViews为多个 UIWebView 设置不同的 User-Agent
【发布时间】:2017-02-05 23:12:22
【问题描述】:

我的应用有 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 方法之类的?我对这些东西知之甚少

【问题讨论】:

    标签: ios objective-c uiwebview user-agent nsurlrequest


    【解决方案1】:

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

    也就是说,如果您出于某种原因必须坚持使用 UIWebView,您可以创建一个 NSURLProtocol 来拦截您应用的所有 HTTP 请求并根据 URL 中的主机名更改字段。 Apple 的网站上有一些 NSURLProtocol 的示例。从它开始并根据需要进行调整。

    【讨论】:

    • ? 对 WKWebView 不了解
    • 感谢您的编辑。我忘了他们直到 iOS 9 才添加这个。
    • 别担心!这对我当前的项目有很大帮助,今晚切换到 WKWebView!
    • 很高兴我能帮上忙。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    • 2022-07-29
    相关资源
    最近更新 更多