【问题标题】:UIWebView not loading a new urlUIWebView 没有加载新的 url
【发布时间】:2017-02-20 15:38:33
【问题描述】:

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

SendDelegateMessage(NSInvocation *): 委托 (webView:decidePolicyForNavigationAction: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”变量是一个全局变量,我已经检查过它是正确的。

【问题讨论】:

  • 你不需要使用这个 while(webView.isLoading) {sender.isEnabled = false}。您已冻结主线程,应用程序无法响应任何请求。您需要为此使用委托方法。
  • 但是当 while 循环完成时,发送方再次处于活动状态。当我再次调用该操作时,webView 不会加载,但按钮可以工作。

标签: ios swift webview swift3


【解决方案1】:

问题

while(webView.isLoading) {
    sender.isEnabled = false
}

您已冻结主线程并且 webView:decidePolicyForNavigationAction: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))
}

【讨论】:

    【解决方案2】:

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

    在你的 info.plist 中:

    在 Info.plist 文件中添加一个带有键 'NSAppTransportSecurity' 的字典

    在字典中添加另一个元素,键为“允许任意加载”

    【讨论】:

    • 已经完成了!第一次正确加载 url。问题是每隔一段时间
    猜你喜欢
    • 2011-02-10
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 2010-10-30
    相关资源
    最近更新 更多