我在uiwebview中有一个网页..在这个页面上有几个http://链接。其中一个我想在safari中打开它。其余的可以在UIWebview中打开。 到目前为止我使用了这段代码;
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
{
NSURL *requestURL = [ [ request URL ] retain ];
// Check to see what protocol/scheme the requested URL is.
if ( ( [ [ requestURL scheme ] isEqualToString: @"http" ]
|| [ [ requestURL scheme ] isEqualToString: @"https" ] )
&& ( navigationType == UIWebViewNavigationTypeLinkClicked ) ) {
return ![ [ UIApplication sharedApplication ] openURL: [ requestURL autorelease ] ];
}
// Auto release
[ requestURL release ];
// If request url is something other than http or https it will open
// in UIWebView. You could also check for the other following
// protocols: tel, mailto and sms
return YES;
}
这适用于http和https等。我的想法是让网站的一个链接指向safari://blah.com并将上面的代码更改为;
if ( ( [ [ requestURL scheme ] isEqualToString: @"safari" ]
|| [ [ requestURL scheme ] isEqualToString: @"https" ] )
希望这会在safari中打开safari:// url,在UIWebview中打开其余部分。但没有运气。 似乎只有标准的东西(如http https tel mailto和sms)在这里工作。 任何想法如何解决这个问题?
答案 0 :(得分:4)
我需要做同样的事情,并使用上面的代码作为我的解决方案的起点。 safari://链接无法打开的问题是它不是真正有效的方案,需要先改为http://。希望这可以帮助任何需要这样做的人。
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
// Make sure it's a link click that called this function.
if ( navigationType == UIWebViewNavigationTypeLinkClicked ) {
NSURL *requestURL = [ request URL ];
// Check to see what protocol/scheme the requested URL is.
if ( [[requestURL scheme] isEqualToString: @"http"] || [[requestURL scheme] isEqualToString: @"https"] ) {
// If it is HTTP or HTTPS, just return YES and the page loads.
return YES;
} else {
// Everything else loads here. We assume what we're dealing with is safari://
// It's important to replace safari:// with http:// or it won't load anyway
[[ UIApplication sharedApplication ] openURL: [NSURL URLWithString: [[requestURL absoluteString] stringByReplacingOccurrencesOfString:@"safari://" withString:@"http://"] ]];
return NO;
}
} else {
return YES;
}
}
答案 1 :(得分:0)
希望这会打开野生动物园:// 在野生动物园和其他地方的网址 UIWebView的。但没有运气。
这里你没有准确地说为什么它不起作用。你能提供更多的细节 - 你尝试了什么,你期待什么,以及发生了什么?
NSURL *requestURL = [ [ request URL ] retain ];
此代码是不必要的(您不需要保留该对象)并产生内存泄漏(沿着输入第一个if
语句和return
s的代码路径行进
// Auto release
此评论具有误导性,因为您未在代码中使用autorelease
。
你的代码也是[(([[bit] hard] to)read)with(all)[[那些]括号]和(空格)]不要使用“code”或“pre”标签来格式代码 - 使用“101 010”按钮进行格式化。我已经为你修好了一下