WKWebView 链接不起作用

OYP*_*YPS 4 ios swift wkwebview

我已经构建了一个SwiftiOS 应用程序,其唯一目的是在WKWebView的帮助下显示一个网站

这工作正常,但按下链接(例如[mailto:]按钮)不起作用,因为它无法打开任何东西!

有人对此有解决方案吗?

我已经阅读了很多关于解决这个问题的文章,但我不知道从哪里开始。

谢谢您的帮助

[更新: ]

下面的代码显示了解决方案

import UIKit
import WebKit

class ViewController: UIViewController, WKNavigationDelegate {

    @IBOutlet var containerView : UIView! = nil
    var webView: WKWebView?

    override func loadView() {
        super.loadView()

        self.webView = WKWebView()
        self.view = self.webView!
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        webView?.navigationDelegate = self
        let url = NSURL(string:"https://google.de")
        let req = NSURLRequest (URL: url!)
        self.webView!.loadRequest(req)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    override func prefersStatusBarHidden() -> Bool {
        return true
    }

    func webView(webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler: (WKNavigationActionPolicy) -> Void) {

        let url = navigationAction.request.URL?.absoluteString
        let url_elements = url!.componentsSeparatedByString(":")

        switch url_elements[0] {
        case "mailto":
            openCustomApp("mailto://", additional_info: url_elements[1])
            decisionHandler(.Cancel)

        default:

        }

        decisionHandler(.Allow)
    }

    func openCustomApp(urlScheme:String, additional_info:String){

        if let requestUrl:NSURL = NSURL(string:"\(urlScheme)"+"\(additional_info)") {
            let application:UIApplication = UIApplication.sharedApplication()
            if application.canOpenURL(requestUrl) {
                application.openURL(requestUrl)
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

tec*_*242 6

您必须实现以下方法(WebKit 的一部分),可用于解析此类 URL:

func webView(webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler: (WKNavigationActionPolicy) -> Void)
Run Code Online (Sandbox Code Playgroud)

这个想法是在通过决定之前编写 if 语句来检查某些 URL 类型。更多信息在这里:

请记住,在 Swift 3 中,某些委托的语法略有变化——使用教程时要记住这一点。如果您已经找到了这个但遇到了错误 - 发布您的代码。

编辑:只是偶然发现这个问题的其他人的更新。请记住,您需要正确的 mailto 格式,例如mailto://tes@test.com(如 OhadM 在 OP 的评论中提到的)