iOS5:打开某些附件文件后,UIWebView不显示Gmail

时间:2011-11-07 08:56:17

标签: uiwebview webkit gmail ios5 attachment

该问题是否有任何修复/解决方法?

要点:

在iOS5设备/模拟器上,使用UIWebView的应用程序在打开某些附件文件后不会显示Gmail,例如.pdf,.txt或.xml。我用UIWebView构建了一些简单的应用程序,它们有searchBar,goBack按钮等等。当它们是为iOS 4.3构建时,它们在iPhone 4.3设备/模拟器上完美运行,但它们不适用于5.0。为iOS5构建的项目也存在同样的问题。

重现步骤:

  1. 使用UIWebView构建针对iOS 4.3或5.0的应用程序,该应用程序至少包含一个goBack按钮和一个用于URL的searchBar。
  2. 在iOS5设备/模拟器上运行应用程序。
  3. 在应用中登录Gmail。
  4. 打开您的某封电子邮件的pdf(txt / xml)附件。 (当您打开UIWebView支持的Microsoft Office文件时,例如word,excel和powerpoint,就不会发生此问题。)
  5. 按goBack按钮返回上一页,或在searchBar中输入“http://mail.google.com”网址。
  6. UIWebView显示白色空白。
  7. 之后您将永远无法看到您的Gmail页面。
  8. 预期结果:

    您可以返回上一封电子邮件(当您按下goBack按钮时),或者转到Gmail页面顶部(当您输入Gmail网址时)。

    实际结果:

    UIWebView只显示一个空白,永远不会让您看到任何Gmail页面。

    回归:

    会发生: - iOS部署目标4.3,在iOS 5.0设备/模拟器上运行 - iOS部署目标5.0,在iOS 5.0设备/模拟器上运行

    不会发生: - iOS部署目标4.3,在iOS 4.3设备/模拟器上运行

    由于

1 个答案:

答案 0 :(得分:0)

我有同样的问题,但无法修复它。我建议你解决方法之一。 如果您的UIWebView转到“mail-attachment.googleusercontent.com”,则返回 行动是错误的。因此,当检测到URL时,您最好创建另一个视图并在其上加载附件。第二个具有GO后退按钮但是当它被按下时你丢弃第二个视图然后通过IBAction方法返回到第一个视图。它适用于iOS4和iOS5。

我的示例代码如下。

-(BOOL) firstView:(UIWebView *)view
shouldStartLoadWithRequest:(NSURLRequest *)req
 navigationType:(UIWebViewNavigationType)nType{
    NSString *strurl=[[[req URL] standardizedURL] absoluteString];
    NSRange range=[strurl rangeOfString: @"mail-attachment" options:NSCaseInsensitiveSearch];
    if (range.location!=NSNotFound){
        Your2ndViewController *attView = [[Your2ndViewController alloc] initWithNibName:@"YourNibNameofAnothor" bundle:nil];
        if(attView==nil){
            return NO;
        }
        attView.wvc=self;//mark the first on the second to return the first one
            [attView loadURLWithString:strurl];
        [self.view addSubview:attView.view ];
        [UIView commitAnimations];
        [attView loadURLWithString:strurl];
        return NO;//Not Load on the first view
    }
    return YES;//Load on the first view
}

您的第二个视图也是UIWebView,它有一个返回按钮,它的处理程序正在跟随

- (IBAction) returnParent:(id)sender
{
    [self.view removeFromSuperview];//return to the first view
    [UIView commitAnimations];
}