在 Web 视图中加载 HTML 时永不结束循环

Posted

技术标签:

【中文标题】在 Web 视图中加载 HTML 时永不结束循环【英文标题】:Never ending loop while loading HTML in Web View 【发布时间】:2017-05-29 03:23:31 【问题描述】:

我尝试使用现有网站加载 webView。

我在导航栏上添加了带有 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)

应用程序永远循环。

该语句适用于当其中一个导航按钮单击时触发。它重定向到内部 url,如“http://yahoo.com/mail”。

【问题讨论】:

【参考方案1】:

这将是基于您的代码的预期行为。线

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

viewDidLoad 将尝试加载 HTML。这又会调用委托方法

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

在委托方法中,当你的代码遇到else if的情况时,它会再次调用

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

这又会再次调用委托方法。这是一个循环循环。代码正常工作。你需要改变逻辑。

【讨论】:

以上是关于在 Web 视图中加载 HTML 时永不结束循环的主要内容,如果未能解决你的问题,请参考以下文章

Web 视图无法加载特定 URL(Web 工具包错误域 102)

我可以使用 Xcode 将文件写入 HTML 文件,然后将其加载到 Web 视图中吗?

laravel 视模板情况加载视图

如何在循环中创建的视图上处理 UITapGestureRecognizer?

在iOS中从左到右滚动时如何在Web视图中获取滚动方向?

在不重新加载 web 视图的情况下更改 html 文本颜色