UIWebView 不使用 loadRequest 加载网站的移动版本

Posted

技术标签:

【中文标题】UIWebView 不使用 loadRequest 加载网站的移动版本【英文标题】:UIWebView not loading mobile version of site with loadRequest 【发布时间】:2011-12-17 02:01:46 【问题描述】:

我正在尝试使用 UIWebView 在我的应用中嵌入网站的移动版本。但是,当我执行以下操作时:

NSURL *url = [NSURL URLWithString:webLink];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[self.webView loadRequest:request];

已加载网站的完整版本。然后,当我单击此页面中的任何链接时,它将处理网站的移动版本(就像我从一开始就希望它那样)。

我尝试过使用用户代理,但没有成功。我不认为它正在查看用户代理来确定是否加载页面的移动版本,因为我将我的 Firefox 用户代理设置为 iPhone,它仍然继续加载完整版本。

如果有帮助,我尝试加载的网站是一个留言板,使用 IP Board 3.1.4。我尝试在网上查看它如何确定是否显示移动版本,但没有运气。

【问题讨论】:

【参考方案1】:

我今天找到了解决问题的方法。

我在 IP Board 支持论坛上发布了我的问题,并得到回复说 IP Board 检查用户代理中的“iPhone”或“mobileApp”cookie。由于弄乱用户代理对我不起作用,我采用了后一种方法。

我将此代码放入我的 appdelegate 中的 applicationDidBecomeActive 方法中:

[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];

NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary];
[cookieProperties setObject:@"mobileApp" forKey:NSHTTPCookieName];
[cookieProperties setObject:@"1" forKey:NSHTTPCookieValue];
[cookieProperties setObject:@"www.example.com" forKey:NSHTTPCookieDomain];
[cookieProperties setObject:@"www.example.com" forKey:NSHTTPCookieOriginURL];
[cookieProperties setObject:@"/" forKey:NSHTTPCookiePath];
[cookieProperties setObject:@"0" forKey:NSHTTPCookieVersion];

NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];

PS:我在另一个关于 cookie 的 *** 问题中找到了这个 cookie 解决方案。

【讨论】:

【参考方案2】:

如果网站没有完整的移动版本,您将无能为力。 :(

【讨论】:

不,它确实有移动版本。当我在 web 视图上执行 loadRequest 时,只是没有加载移动版本。只要我单击此 web 视图中的链接,它就会加载正确的移动版本。 我仍然认为这是您尝试加载的网站的问题。 好的,但是当我在 safari 中加载主页时,它会直接进入移动站点,这与 webview 中发生的情况不同。我觉得我需要做一些特别的事情来构建请求,以便它知道立即加载移动网站。 Safari 可能会发送一些您没有发送的 http 标头。我会创建一个页面来检索 Safari 发送的标题,这样你就会知道你没有发送什么。 知道如何通过 safari 做到这一点吗?我通过我的网络视图查看了它,确实在它第二次加载时(在移动视图中)我看到了一些 iPhone 的元标记。有什么办法可以将这些注入到我的请求中?

以上是关于UIWebView 不使用 loadRequest 加载网站的移动版本的主要内容,如果未能解决你的问题,请参考以下文章

UIWebView loadRequest 重用给出闪烁效果

General-Block 56, 1024, 8, 244, 24 Memory Leaks using UIWebView loadRequest

UIWebview loadRequest不仅适用于iPhone X.

iOS UIWebView loadRequest 耗时太长

UIWebview loadRequest 仅在 iPhone X 中不起作用

如何在Swift中的UIWebView中加载URL?