2017-05-29 45 views
0

我嘗試使用現有網站加載webView。在Web視圖中加載HTML時永不終止循環

我添加了具有URL鏈接導航欄上的按鈕:

override func viewDidLoad() { 
    super.viewDidLoad() 

    webView.delegate = self 


    var myHTMLString = "" 
    guard let myURL = URL(string: domainURLString) else { 
     print("Error: \(domainURLString) doesn't seem to be a valid URL") 
     return 
    } 

    do { 
     myHTMLString = try String(contentsOf: myURL, encoding: .utf8) 
    } catch let error { 
     print("Error: \(error)") 
    } 
    webView.frame = view.bounds 
    webView.scalesPageToFit = true 

    createBottomNavigationBar() 


    webView.loadHTMLString(myHTMLString as String, baseURL: nil) 

} 




func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool { 

    print("===============================start===============================") 

    let myURLString:String = (request.url?.absoluteString)! 

    var myHTMLString = "" 

    if navigationType == UIWebViewNavigationType.linkClicked { 
     print("link clicked") 

     webView.stopLoading() 

     var myHTMLString = "" 
     let myURL = URL(string: myURLString) 
     do { 
      myHTMLString = try String(contentsOf: myURL!, encoding: .utf8) 
     } catch let error { 
      print("Error: \(error)") 
      return true 
     } 

     webView.loadHTMLString(myHTMLString as String, baseURL: nil) 

     print("first") 
     print(request.url) 


    }else if(navigationType == UIWebViewNavigationType.other){ 
     print("This is for Navigation Button click") 
     //webView.loadHTMLString(myHTMLString as String, baseURL: nil) 
    } 
    else{ 
     print("else") 
    } 
    return true 

然而,當我取消

webView.loadHTMLString(myHTMLString as String, baseURL: nil) 

在此聲明:

}else if(navigationType == UIWebViewNavigationType.other){ 

應用程序永遠循環。

該聲明適用於當其中一個導航按鈕點擊觸發時。它重定向到內部網址,如「http://yahoo.com/mail」。

回答

1

這將是基於您的代碼的預期行爲。該行

webView.loadHTMLString(myHTMLString as String, baseURL: nil) 

in viewDidLoad將嘗試加載HTML。這反過來將調用委託方法

webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool 

裏面的委託方法,當你的代碼打else if情況下,它會再打電話

webView.loadHTMLString(myHTMLString as String, baseURL: nil) 

這反過來又會再次調用委託方法。這是一個循環循環。代碼正常工作。你需要改變邏輯。

+0

我改變了邏輯,它的工作原理!謝謝! – Jinna