mailto: link nel UIWebView - non funziona
Domanda
E 'la speciale areanything è necessario in HTML o in un callback UIWebView ai tag maniglia di ancoraggio con una href, o c'è qualcosa di speciale in un tag di ancoraggio con un link mailto nel href?
Soluzione
Nel vostro delegato di UIWebView, fare:
- (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;
}
Altri suggerimenti
Ho notato che durante l'esecuzione nel simulatore iPhone, potrei cliccare su un link HTTP nella mia UIWebView e sarebbe aperto in Safari, ma quando ho cliccato su un link mailto non sarebbe successo niente. Ma quando ho schierato l'applicazione su un dispositivo vero e proprio, ha funzionato. Mi aspetto che il motivo è perché non v'è alcuna applicazione di posta sul simulatore, ma c'è Safari.
ho voluto sottolineare che questo non è probabilmente la soluzione migliore.
UIWebView ha una proprietà chiamata dataDetectorTypes - impostando questo a tutti o l'indirizzo dovrebbe risolvere il problema senza l'override del metodo di cui sopra:
myWebView.dataDetectorTypes = UIDataDetectorTypeAll; //or UIDataDetectorTypeAddress etc..
Ma essere consapevoli che questo potrebbe non funzionare al simulatore - Ho provato con l'iPad 6.0 Simulator dove non funziona, anche se su un dispositivo iPad sta funzionando come un fascino
esempio di lavoro per la Swift 4: 3 casi sono trattati, espandere se necessario.
- mailto-collegamento funziona
- alcune URL si fa clic che si desidera aprire in Webview sé
-
aprire tutti gli altri URL in Safari Mobile
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 }