#iphone #html #uiwebview #safari
#iPhone #HTML #uiwebview #safari
Вопрос:
У меня есть обычная HTML-страница с несколькими ссылками. Когда эта HTML-страница загружается в UIWebView и нажимается ссылка, она должна открываться в safar, а не В UIWebView.
Я думаю, что я не могу использовать этот код:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
// NSLog(@"shouldStartLoadWithRequest Loading: %@", [request URL]);
return TRUE;
}
… потому что это для приложений, и это не будет работать на HTML-странице, верно?
Спасибо M.
Ответ №1:
Обычно, когда вы хотите открыть ссылку в Safar i, вы делаете это —
[[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" ])
amp;amp; ( navigationType == UIWebViewNavigationTypeLinkClicked ) )
{
return ![[ UIApplication sharedApplication] openURL: [requestURL autorelease]];
}
[requestURL release];
return YES;
}
Таким образом, приведенный выше код открывает каждый http://, https://, and mailto://
URL, открытый во внешних приложениях Safari или Mail.
Кроме того, чтобы запускать Safari только по выбранным URL-адресам, вы могли бы изменить их схему с http:// на safari://
или что-то подобное и отправлять эти URL-адреса только в систему (после замены пользовательской схемы URL на http://
).
Я делаю это в своей внутренней справочной документации, которая в формате HTML отображается в UIWebView, чтобы в процессе проверки не возникало проблем со встроенным в мое приложение веб-браузером общего назначения.
Ответ №2:
используйте этот
-(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;
}