mailto:UIWebView中的链接 - 不起作用

时间:2010-04-05 17:29:54

标签: iphone href mailto

在html中需要什么特别的东西,或者在UIWebView中使用回调来处理带有href的锚标签,或者在href中有一个带有mailto链接的锚标记有什么特别之处吗?

4 个答案:

答案 0 :(得分:62)

在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;
}

答案 1 :(得分:34)

我注意到在iPhone模拟器中运行时,我可以点击我的UIWebView中的HTTP链接,它会在Safari中打开,但是当我点击mailto链接时,什么都不会发生。但是,当我将应用程序部署到真实设备时,它可以工作。我希望原因是因为模拟器上没有邮件应用程序,但有Safari。

答案 2 :(得分:2)

我想说明这可能不是最好的解决方案。

UIWebView确实有一个名为dataDetectorTypes的属性 - 将此设置为all或address可以解决您的问题而不会覆盖上述方法:

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

但请注意,这可能无法在模拟器上运行 - 我尝试使用iPad 6.0模拟器,虽然在iPad设备上它的工作就像魅力一样,但它无法正常工作!

答案 3 :(得分:1)

Swift 4的工作示例: 治疗了3例,根据需要扩大。

  1. 邮件链接有效
  2. 单击了一些您想在Webview本身中打开的URL
  3. 在移动浏览器中打开所有其他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
    }