在UIWebView中处理带href属性的锚点标签或带mailto链接的锚点标签,是否需要在HTML或回调函数方面做出特殊处理?
- (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模拟器中,我可以点击UIWebView中的HTTP链接并在Safari中打开,但是当我点击mailto链接时没有任何反应。但是当我将应用程序部署到真实设备上时,它可以正常工作。我认为原因是模拟器上没有邮件应用程序,但有Safari。
myWebView.dataDetectorTypes = UIDataDetectorTypeAll; //or UIDataDetectorTypeAddress etc..
但请注意,这可能在模拟器上无法正常工作 - 我尝试在iPad 6.0模拟器上测试,发现它无法工作,但在iPad设备上可以完美运行!
Swift 4的工作示例:
处理3种情况,如有需要可扩展。
最初的回答:
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
}
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { if (request.url?.scheme == "mailto") { UIApplication.shared.open(request.url)....
- Prabhakar Kasi