在UIWebView中获取iPhone的手机twitter webapp

好的,这里是场景:我正在构build一个iPad应用程序,它将显示一个UIWebView,宽度= 320像素(或点数)。 它会在应用程序内的“小部件”的风。

我必须修改webview的用户代理,使其显示mobileversion,而不是桌面版本,通过self.viewDidLoad这样做。

NSDictionary *dictionnary = [[NSDictionary alloc] initWithObjectsAndKeys:@"Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3", @"UserAgent", nil]; [[NSUserDefaults standardUserDefaults] registerDefaults:dictionnary]; 

我还将webview的框架设置为320像素宽,scalePageToFit设置为YES。

好的,但问题在于:webview显示的是移动版本,而“平板电脑”移动版本可能会出现在Honeycombs平板电脑上。 这是一个巨大的iPhonenetworking应用程序,像600像素宽。 UIwebView的框架宽320px,但内容更广泛。

我不明白什么可能是happing,因为用户代理被设置为iPhone上的移动Safari。 任何有关如何使这个320px宽的UIWebView显示完全相同的版本,当您在iPhone的移动Safari上键入mobile.twitter.com时获得的想法?

编辑:好的,这些问题似乎与twitter webapp使用“设备宽度”来确定显示给用户的web应用程序有关。

我发现这个解决scheme: 在UIPopoverController内的UIWebView中显示Wiki移动页面

它有点作品:

  -(void)webViewDidFinishLoad:(UIWebView *)webView{ if (hasLoaded == NO){ NSString *webHTML = [NSString stringWithContentsOfURL:self.webView.request.URL encoding:NSUTF8StringEncoding error:NULL]; NSRange range = [webHTML rangeOfString:@"device-width"]; if ((range.location!=NSNotFound)&&(range.length != 0)) { webHTML = [webHTML stringByReplacingOccurrencesOfString:@"device-width" withString:@"320" options:0 range:range]; [self.webView loadHTMLString:webHTML baseURL:[NSURL URLWithString:@"http://mobile.twitter.com"]]; hasLoaded = YES; } } 

它改变了设备的代码为320,这是完美的,但是…当webview reloades(与新的代码)我得到旧的(很老的)twitter web应用程序,而不是当前的。 任何想法如何解决这个问题?

这似乎是一个更好的解决scheme,因为它不需要重新加载HTML: https : //stackoverflow.com/a/6104537/1449618

以下在iPad上的应用程序中工作。

将自己设置为UIWebViewDelegate,然后:

 - (void)webViewDidFinishLoad:(UIWebView *)webView { [webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.querySelector('meta[name=viewport]').setAttribute('content', 'width=%d;', false); ", (int)webView.frame.size.width]]; }