我有一个包含一些链接的普通HTML页面。 当在UIWebView中加载此html页面并单击一个链接时,它应该在safar而不是UIWebView中打开。
我想我不能使用这段代码:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
// NSLog(@"shouldStartLoadWithRequest Loading: %@", [request URL]);
return TRUE;
}
...因为它适用于应用程序而且它无法在html页面上运行,对吧?
感谢名单 微米。
答案 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;
}