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

Posted

技术标签:

【中文标题】mailto:UIWebView 中的链接 - 不起作用【英文标题】:mailto: link in UIWebView - Does Not work 【发布时间】:2011-02-04 12:14:39 【问题描述】:

你需要在 html 中的区域或 UIWebView 中的回调来处理带有 href 的锚标签,或者在 href 中带有 mailto 链接的锚标签有什么特别之处吗?

【问题讨论】:

【参考方案1】:

在你的 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;

【讨论】:

在 Swift 4 func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) if (request.url?.scheme == "mailto") UIApplication.shared.open(request.url).... 【参考方案2】:

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

【讨论】:

ios 模拟器上没有电子邮件应用程序。哦!我从来没有想过。感谢您结束我的困惑和沮丧。【参考方案3】:

我想指出,这可能不是最好的解决方案。

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

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

但请注意,这可能无法在模拟器上运行 - 我在 iPad 6.0 模拟器上进行了尝试,但在 iPad 设备上它却无法正常运行!

【讨论】:

【参考方案4】:

Swift 4 的工作示例: 治疗3例,按需扩充。

    mailto-link 工作正常 点击了一些您想在 Webview 本身中打开的 URL

    在移动 Safari 中打开所有其他 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
    
    

【讨论】:

以上是关于mailto:UIWebView 中的链接 - 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Safari 中的 UIWebView 打开链接不起作用?

UIWebView 迁移后,WKWebView 中显示的 PDF 中的链接不起作用

Android 中的 mailto 链接是不是需要进行 URL 编码才能使邮件 Intent 起作用?

UIWebView在Safari中打开链接

无需单击即可检测UIWebView链接

mailto 链接在 chrome 扩展弹出窗口中不起作用