Мне встроили UIWebView в рамках моего приложения для iPhone. Я хочу смочь иметь определенные ссылки в этом webview, открытый в полное Мобильное приложение Safari (т.е. не моя встроенная версия его).
Существует ли простой способ структурировать некоторые мои hrefs для принуждения этого вместо каждой ссылки, открывающейся в моем встроенном webview?
Спасибо.
Чтобы расширить то, что сказал Рэнди, вот что я использую в своем приложении, чтобы каждый URL-адрес http: //, https: // и mailto: // открывался во внешних приложениях Safari или Mail:
-(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;
}
Как Рэнди говорит, что вы захотите реализовать это в любом классе, который вы назначили делегатом UIWebView. Чтобы запускать Safari только по выбранным URL-адресам, вы можете изменить их схему с http: // на safari: // или что-то подобное, и отправлять только эти URL-адреса в систему (после замены настраиваемой схемы URL-адресов на http: //) .
Я делаю это в своей внутренней справочной документации, которая представляет собой HTML-код, отображаемый в UIWebView, так что я не сталкиваюсь с проблемами в процессе проверки из-за наличия универсального веб-браузера, встроенного в мое приложение.
Я сам не пробовал, но думаю, что вы можете реализовать метод UIWebViewDelegate
webView:shouldStartLoadWithRequest:navigationType
который будет вызываться при каждом нажатии на ссылку в UIWebView. В этом методе вам просто нужно определить, должна ли нажатая ссылка привести к запуску Safari или нет, и использовать openURL, если должна.
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
// Check if this was a click event and then some other criteria for determining if you want to launch Safari.
if (navigationType == UIWebViewNavigationTypeLinkClicked && [Some other criteria]) {
[[UIApplication sharedApplication] openURL:request.URL];
// Return false to indicate to the UIWebView to not navigate to the linked target
return false;
}
// Return true so that the UIWebView loads the link target
return true;
}
Не забудьте, что вам нужно установить свойство делегата UIWebView на экземпляр класса, который реализует UIWebViewDelegate.