Is the areanything special you need in html or Callbacks in a UIWebView to handle anchor tags with an href, or is there something special about an anchor tag with a mailto link in the href?
In your UIWebView's delegate, do:
- (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;
}
I noticed that when running in the iPhone simulator, I could click on an HTTP link in my UIWebView and it would open in Safari, but when I clicked on a mailto link nothing would happen. But when I deployed the app to a real device, it worked. I expect the reason is because there is no mail app on the simulator, but there is Safari.
I wanted to note that this is probably not the best solution.
UIWebView does have a property called dataDetectorTypes - setting this to all or address should solve your problem without overriding the Method mentioned above:
myWebView.dataDetectorTypes = UIDataDetectorTypeAll; //or UIDataDetectorTypeAddress etc..
But be aware that this might not work on the simulator - I tried it with the iPad 6.0 Simulator where it's not working although on an iPad Device it's working like a charm!
Working example for Swift 4: 3 cases are treated, expand as needed.
- mailto-link is working
- some URL is clicked that you want to open in Webview itself
open all other URLs in mobile 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 }
© 2022 - 2024 — McMap. All rights reserved.
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { if (request.url?.scheme == "mailto") { UIApplication.shared.open(request.url)....
– Biographer