Вопрос

Это специальное специальное, вам нужно в HTML или обратных вызовах в UIWebView, чтобы обрабатывать якорные теги с помощью href, или есть что-то особенное в анкеренном теге с ссылкой mailto в href?

Это было полезно?

Решение

В деле партии вашего UIWEBVIEW делайте:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    if ([[[request URL] scheme] isEqual:@"mailto"]) {
        [[UIApplication sharedApplication] openURL:[request URL]];
        return NO;
    }
    return YES;
}

Другие советы

Я заметил, что при запуске в симуляторе iPhone я мог бы нажать на ссылку HTTP в моем UIWebView, и он откроется в Safari, но когда я нажал на ссылку Mailto. Но когда я развернул приложение к реальному устройству, он работал. Я ожидаю, что причина в том, что на симуляторе нет почтового приложения, но есть Safari.

Я хотел отметить, что это, вероятно, не лучшее решение.

У UiWebView имеет свойство под названием DataDetEtectortyPes - установка этого на все или адрес должен решить вашу проблему без переопределения упомянутого выше способа:

myWebView.dataDetectorTypes = UIDataDetectorTypeAll; //or UIDataDetectorTypeAddress etc..

Но осознайте, что это может не работать на симуляторе - я попробовал его с симулятором iPad 6.0, где он не работает, хотя на устройстве iPad он работает как шарм!

Рабочий пример для Swift 4: 3 случая обрабатываются, расширяются по мере необходимости.

  1. mailto-link работает
  2. Кто-нибудь URL нажат, что вы хотите открыть в самом веб-просмотре
  3. Откройте все остальные URL в мобильном Safari

    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    
    if let url = navigationAction.request.url {
        if (url.scheme == "mailto") {
            // mailto: link is clicked
            UIApplication.shared.open(url)
            decisionHandler(.cancel)
            return
        }
        if (url.absoluteString.contains("www.example.com/webviewURL")) {
            // Load this stuff in WebView
            decisionHandler(.allow)
            return
        } else {
            // open any other URL in mobile Safari
            UIApplication.shared.open(url)
            decisionHandler(.cancel)
            return
        }
    }
    
    decisionHandler(.cancel)
    return
    }
    
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top