HTML-ссылки, которые закрывают UIWebView

#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;
    }