每当我尝试在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"代码中的变量是全局变量,我已经检查了它是否正确。
答案 0 :(得分:1)
您需要在您的应用上允许http和https:
在您的info.plist中:
在Info.plist文件中添加一个包含密钥' NSAppTransportSecurity'
的字典使用键'允许任意载入'
在词典中添加另一个元素
答案 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))
}