【发布时间】:2012-10-07 04:26:11
【问题描述】:
如何加载网站的桌面版本(例如 google、facebook)而不是移动版本?
【问题讨论】:
标签: iphone objective-c ios uiwebview
如何加载网站的桌面版本(例如 google、facebook)而不是移动版本?
【问题讨论】:
标签: iphone objective-c ios uiwebview
您为什么要经历所有这些麻烦?这是错误的/LONG 方法。
只需创建一个NSMutableRequest 并在其中设置useragent 而不是UIWebView。然后只需使用 UIWebView 普通/非私有 loadRequest:-function 加载请求。
【讨论】:
编辑:忽略所有这些。亚尼夫是对的。只需使用- loadRequest: 消息将NSMutableURLRequest 加载到UIWebView 实例,并将"User-Agent" 标头设置为您想要的任何内容。
NSMutableURLRequest *rq = [NSMutableURLRequest requestWithURL:someUrl];
[rq setValue:@"Some desktop user-agent" forHTTPHeaderField:@"User-Agent"];
[webView loadRequest:rq];
供您参考,桌面用户代理字符串的一个不错选择是 Chrome - 它也是基于 WebKit 的,如 Safari,因此特定于 WebKit 的扩展将起作用。所以尝试将用户代理字符串设置为
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
原帖:
你可以尝试欺骗 UIWebView 的用户代理,但我不能保证这样的胖黑客会让你通过 AppStore 的薄门......
void *object_getIvarPtr(id obj, const char *name)
{
Ivar iv = object_getInstanceVariable(obj, name, NULL);
off_t offset = ivar_getOffset(iv);
return (char *)obj + offset;
}
// In some initialization routine, after having created the web view
id webViewInternal = *(id *)object_getIvarPtr(someWebView, "_internal");
id webBrowserView = *(id *)object_getIvarPtr(webViewInternal, "browserView");
id webKitWebView = [webBrowserView webView];
NSString *desktopUAStr = @"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"
[webKitWebView setCustomUserAgent:desktopUAStr];
【讨论】:
instance method -setCustomUserAgent not found (return type default to 'id')