2011-11-04 49 views
1

我有一个正常的HTML页面,只有几个链接。 当这个html页面被加载到UIWebView中,并且链接被点击时,它应该在safar中打开,而不是在UIWebView中打开。关闭UIWebView的HTML链接

我想我不能使用此代码:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 
{ 
    // NSLog(@"shouldStartLoadWithRequest Loading: %@", [request URL]); 
    return TRUE; 
} 

...因为它是应用程序,它不会html页面上工作,对不对?

感谢名单 M.

回答

2

通常,当你想打开萨法尔链接我这样做 -

[[UIApplication sharedApplication] openURL:[NSURL URLWithString: @"http://www.google.co.uk"]];

但因为你是在UIWebView你不能做到这一点。

因此,你需要做的是实现shouldStartLoadWithRequest代表UIWebView。只要在UIWebView中点击链接,就会调用该代理。现在你可以决定做你想做的。在这种情况下,你想在Safari中打开这个链接。因此,代码是这样的,以报价 -

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 
{ 
    NSURL *requestURL =[[ request URL ] retain]; 
    if (([[ requestURL scheme ] isEqualToString: @"http" ] || 
     [[ requestURL scheme ] isEqualToString: @"https" ] || 
     [[ requestURL scheme ] isEqualToString: @"mailto" ]) 
     && (navigationType == UIWebViewNavigationTypeLinkClicked)) 
    { 
     return ![[ UIApplication sharedApplication] openURL: [requestURL autorelease]]; 
    } 
    [requestURL release]; 
    return YES; 
} 

所以上面的代码打开每个http://, https://, and mailto:// URL外部Safari或邮件应用程序打开。

也有只能选择网址推出Safari浏览器,你可以从http改变他们的计划://到safari://或类似的东西,只踢那些网址,关闭系统(带http://更换自定义URL方案后)。

我在我的内部帮助文档中完成这项工作,该工具将HTML显示在UIWebView中,以便在应用程序中嵌入通用Web浏览器时不会遇到审阅过程中的问题。

0

使用这一个

-(BOOL)webView:(UIWebView *)webView1 shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{ 

     NSURL *requestURL = [[ request URL] retain]; 
     NSString *str_url=[NSString stringWithFormat:@"%@",requestURL]; 
     if([str_url isEqualToString:@"about:blank"]){ 
      [requestURL release]; 
      return YES; 
     }else{ 
       [[UIApplication sharedApplication] openURL:requestURL]; 
     } 
     [requestURL release]; 
     return NO; 
    }