2016-09-27 90 views
0

我已经构建了一个Swift iOS应用程序,其唯一目的是通过WKWebView来显示网站。WKWebView链接不工作

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

有没有人有解决方案?

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

感谢您的帮助

[UPDATE:]

下面的代码示出了溶液

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) 
      } 
     } 
    } 
} 
+1

看起来很好。你调试了DecisionPolicyForNavigationAction吗?例如的网址? 基本上你只需要mailto://[email protected] – OhadM

+0

你刚刚解决了这个问题。下面的答案是正确的做法,上面的代码显示了解决方案。我唯一的问题是,mailto:链接格式不正确!感谢大家 –

回答

2

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

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

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

记住一些语法代表略有斯威夫特卡伦特3改变 - 这是使用教程时要牢记。如果你已经找到了这个,但是你遇到了一个错误 - 发布你的代码。

编辑:只是对其他谁偶然发现这个问题的更新。请记住,您需要格式正确的邮件,例如mailto://[email protected](正如OhadM在OP的评论中提到的)

+0

感谢您的帮助到目前为止,我找到了您发布的GitHub示例,但我不知道如何以及在何处放置它以及如何使用它 –

+0

@ChrisNeumaier您必须在ViewController中使用它,并使用WebKit 。开始在你的类中输入它,Xcode将帮助你处理代码框架。该方法已经作为WebKit的一部分存在 - 就像viewDidLoad是UIKit的一部分。 decidePolicyForNavigationAction可以帮助您决定如何处理网址 – tech4242

+0

我使用我的ViewController更新了我的原始文章,我使用了您建议的功能,但是我无法使其正常工作 –