2016-09-27 88 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更新了我的原始文章,我使用了您建議的功能,但是我無法使其正常工作 –