Есть ли что-то особенное, что вам нужно в html или обратных вызовах в UIWebView для обработки тегов привязки с помощью href, или есть что-то особенное в теге привязки со ссылкой mailto в href?
mailto: ссылка в UIWebView - не работает
Ответы (4)
В вашем делегате 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;
}
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { if (request.url?.scheme == "mailto") { UIApplication.shared.open(request.url)....
- person Prabhakar Kasi; 21.02.2018
Я заметил, что при работе в симуляторе iPhone я мог щелкнуть ссылку HTTP в своем UIWebView, и он открылся бы в Safari, но когда я щелкнул ссылку mailto, ничего не произошло. Но когда я развернул приложение на реальном устройстве, оно сработало. Я предполагаю, что причина в том, что на симуляторе нет почтового приложения, но есть Safari.
Я хотел отметить, что это, вероятно, не лучшее решение.
UIWebView имеет свойство, называемое dataDetectorTypes — установка для него значения all или address должна решить вашу проблему без переопределения метода, упомянутого выше:
myWebView.dataDetectorTypes = UIDataDetectorTypeAll; //or UIDataDetectorTypeAddress etc..
Но имейте в виду, что это может не работать на симуляторе — я пробовал это с симулятором iPad 6.0, где он не работает, хотя на устройстве iPad он работает как шарм!
Рабочий пример для Swift 4: обрабатывается 3 случая, расширяйте по мере необходимости.
- mailto-ссылка работает
- щелкнут какой-то URL-адрес, который вы хотите открыть в самом Webview
открыть все остальные URL-адреса в мобильном сафари
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 }