Вынудить ссылку веб-представления запустить Safari?

Мне встроили UIWebView в рамках моего приложения для iPhone. Я хочу смочь иметь определенные ссылки в этом webview, открытый в полное Мобильное приложение Safari (т.е. не моя встроенная версия его).

Существует ли простой способ структурировать некоторые мои hrefs для принуждения этого вместо каждой ссылки, открывающейся в моем встроенном webview?

Спасибо.

41
задан Brad Larson 21 October 2011 в 19:17
поделиться

2 ответа

Чтобы расширить то, что сказал Рэнди, вот что я использую в своем приложении, чтобы каждый 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, так что я не сталкиваюсь с проблемами в процессе проверки из-за наличия универсального веб-браузера, встроенного в мое приложение.

61
ответ дан 27 November 2019 в 00:24
поделиться

Я сам не пробовал, но думаю, что вы можете реализовать метод 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.

12
ответ дан 27 November 2019 в 00:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: