关闭UIWebView的HTML链接

时间:2011-11-04 12:22:25

标签: iphone html uiwebview safari

我有一个包含一些链接的普通HTML页面。 当在UIWebView中加载此html页面并单击一个链接时,它应该在safar而不是UIWebView中打开。

我想我不能使用这段代码:

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

...因为它适用于应用程序而且它无法在html页面上运行,对吧?

感谢名单 微米。

2 个答案:

答案 0 :(得分:2)

通常,当你想在Safar中打开一个链接时,我会这样做 -

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

但是因为你在UIWebView,你不能这样做。

因此,您需要做的是实现shouldStartLoadWithRequest的{​​{1}}委托。只要在UIWebView中单击链接,就会调用此委托。现在你可以决定做你想做的事了。在这种情况下,您想在Safari中打开此链接。所以代码是这样的,引用 -

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; } URL。

另外,如果只有选择的URL启动Safari,您可以将他们的方案从http://更改为http://, https://, and mailto://或类似的东西,并且只将这些URL发送到系统(在用{替换自定义URL方案之后) {1}})。

我在内部帮助文档中执行此操作,该文档是在UIWebView中显示的HTML,因此我在审核过程中不会遇到问题,因为我的应用程序中嵌入了通用Web浏览器。

答案 1 :(得分: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;
    }