在UIWebView中请求http://mobile.twitter.com

6
我一直在尝试在我的iPad应用程序中插入一个小的webview(320x480),以模拟显示移动Twitter的“iPhone屏幕”。但是,每当uiwebview收到一个NSUrlRequest来加载http://mobile.twitter.com时,我的应用程序就会自动从屏幕上被撕下来,iOS会打开iPad版的Twitter。有没有办法改变这种行为?
这是我正在做的事情:
UIWebView *viewDoTwitter = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, self.view.bounds.size.height)];
viewDoTwitter.autoresizingMask = UIViewAutoresizingFlexibleHeight;
viewDoTwitter.scalesPageToFit = YES;

 [rootView insertSubview:viewDoTwitter atIndex:0];
 [viewDoTwitter loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://mobile.twitter.com"]]];

编辑:

好的,我找到了解决方案,这里是:http://www.mphweb.com/en/blog/easily-set-user-agent-uiwebview

 UIWebView *viewDoTwitter = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, self.view.bounds.size.height)];
 viewDoTwitter.autoresizingMask = UIViewAutoresizingFlexibleHeight;
 viewDoTwitter.scalesPageToFit = YES;

 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];

 [rootView insertSubview:viewDoTwitter atIndex:0];

 [viewDoTwitter loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://m.twitter.com"]]];

但是,现在面临一个新问题:mobile.twitter.com 坚持适应 iPad 屏幕的大小,而不是我指定的 320 像素宽度。

你能发布一下你的UIWebView代码吗? - Mick MacCallum
你想在这个视图中仅显示 Twitter 网页,还是使其对用户可用,或者其他什么? - Artur Ozierański
是的,它需要对用户可用。 - JulianoRossi
2个回答

1
如果你是这样做的,那么你不应该被重定向。
- (void)viewDidLoad {
  [super viewDidLoad];
  NSURL *url = [NSURL URLWithString:@"http://mobile.twitter.com"];
  NSURLRequest *request = [NSURLRequest requestWithURL:url];
  [webView loadRequest:request];
}

您所描述的行为可以通过以下代码实现(重定向):

[[UIApplication sharedApplication] openURL:url];

我正在执行以下操作:[viewDoTwitter loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://m.twitter.com"]]]; - JulianoRossi

1

我也注意到很多应用程序中UIWebView的这种新行为。这只是从今天开始发生,因为昨天所有这些应用程序都运行正常。

如果你尝试连接https://mobile.twitter.com(请注意URL是“https”),在UIWebView中你将进入Twitter登录界面,但在输入凭据后,该网站会尝试在登录后将您的应用程序重定向到twitter://timeline。如果您的设备上没有安装官方的Twitter原生移动应用程序,则无法在UIWebView中浏览Twitter移动站点。如果您已安装Twitter原生应用程序,则会将您重定向到该应用程序,而不是在UIWebView中浏览移动站点。

奇怪的是,如果你在Mobile Safari中尝试同样的事情,你不会得到这个重定向到原生Twitter移动应用程序的行为。

这是Twitter方面的一种新限制吗?因为这将破坏许多通过UIWebView访问Twitter移动站点的应用程序。

我不确定其他用户是否遇到了相同的新行为?

PS:刚刚查看了Twitter开发人员支持讨论板,有其他人遇到了相同的问题吗?


1
我发现这与webview的用户代理有关,这就是为什么UIWebView和MobileSafari之间的行为不同。 - JulianoRossi
请看我问题顶部的“EDITED”。 - JulianoRossi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接