UIWebView未加载新网址

时间:2017-02-20 15:38:33

标签: ios swift webview swift3

每当我尝试在UIWebView上加载另一个URL时,我都会遇到同样的错误:

  

SendDelegateMessage(NSInvocation *):委托(webView:decisionPolicyForNavigationAction:request:frame:decisionListener :)在等待10秒后无法返回。

我关于webView的代码如下:

@IBAction func changeUrl(sender: UIButton) {
    if LEDON {
        let urlStr = NSString(format: "%@/?Led=0", self.url)
        let req = URLRequest(url: URL(string: urlStr as String)!)
        webView.loadRequest(req)
        while(webView.isLoading) {
            sender.isEnabled = false
        }
        sender.isEnabled = true
        LEDON = false;
    } else {
        let urlStr = NSString(format: "%@/?Led=1", self.url)
        let req = URLRequest(url: URL(string: urlStr as String)!)
        webView.loadRequest(req)
        while(webView.isLoading) {
           sender.isEnabled = false
        }
        sender.isEnabled = true
        LEDON = true;
    }
}

如果我第一次按下UIButton代码完美无缺,但是当我再次点击它时,我得到了那个错误。 我在哪里做错了?

" URL"代码中的变量是全局变量,我已经检查了它是否正确。

2 个答案:

答案 0 :(得分:1)

您需要在您的应用上允许http和https:

在您的info.plist中:

  

在Info.plist文件中添加一个包含密钥' NSAppTransportSecurity'

的字典      

使用键'允许任意载入'

在词典中添加另一个元素

enter image description here

答案 1 :(得分:1)

中的问题
while(webView.isLoading) {
    sender.isEnabled = false
}

您已冻结主线程并且 webView:decisionPolicyForNavigationAction:request:frame:decisionListener:无法调用。

尝试使用它:

func viewDidLoad()
{
    ...
    webView.delegate = self;//UIWebView
    //webView. navigationDelegate = self;//WKWebView
}

@IBAction func changeUrl(sender: UIButton) {
    if LEDON {
        let urlStr = NSString(format: "%@/?Led=0", self.url)
        let req = URLRequest(url: URL(string: urlStr as String)!)
        webView.loadRequest(req)
        sender.isEnabled = false
        LEDON = false;
    } else {
        let urlStr = NSString(format: "%@/?Led=1", self.url)
        let req = URLRequest(url: URL(string: urlStr as String)!)
        webView.loadRequest(req)
        sender.isEnabled = false
        LEDON = true;
    }
}

对于UIWebView,您需要使用

func webViewDidFinishLoad(UIWebView)
{
    yourButton.isEnabled = true
}

对于WKWebView

func webView(_ webView: WKWebView, 
            didFinish navigation: WKNavigation!)
{
    yourButton.isEnabled = true
}

<强> ======================================

如果你想使用while循环尝试改变它:

while(webView.isLoading) {
    sender.isEnabled = false
    RunLoop.current.run(until: Date(timeIntervalSinceNow: 0.5))
}