iOS 9 WKWebView产生“未能加载资源:取消”,其中iOS 8不会

iOS 9 WKWebView产生“未能加载资源:取消”,其中iOS 8不会

问题描述:

我正在研究支持iOS 8和9的应用程序,使用WKWebView在我的应用程序中使用WKWebView。iOS 9 WKWebView产生“未能加载资源:取消”,其中iOS 8不会

现在,我已将我的网站和ATS中的子域列入白名单(等待一些SSL证书更改)。所以我不认为我要描述的是与ATS有关,但是谁知道。

我的本机代码在我的WKWebView中调用一个javascript函数,该函数使用jQuery触发ajax GET请求。

在iOS 8中,它每次都有效。

在iOS 9中,它有时只有工作。看似不到一半的时间。

当我使用Safari浏览器的开发者控制台,我的iPhone连接到桌面上,挂接到WKWebView,我能看到这个错误:

Failed to load resource: cancelled

至于我可以告诉,网络请求甚至不会被制作。我一直在盯着这个问题已经有2天了,我无法辨别出网络请求被“取消”的原因。在某些情况下,我会在ajax请求上调用.abort(),但在诊断此问题时,我已将所有这些内容评论出来。

是否有其他人在iOS 8中遇到过像iOS 8这样的新的ajax问题?

任何想法如何我可以找出什么是“取消”ajax请求?我试过每个我能想到的调试技巧,但调试WKWebView ajax并不那么容易。

+0

你有没有解决这个问题?我有同样的问题。 – Nancy

+0

@Nancy查看我刚发布的答案。我不确定它为什么对我们有效,我的猜测仅仅是ajax请求被取消,因为发起请求的控制器在请求时正在被解除(即使请求实际上是在另一个控制器中发生的.. )。 '¯\ _(ツ)_ /' –

我不能肯定地说下面的改变为什么解决了我们的问题,但只是试图解释我们做了什么,这样你就可以看到它可能适用于其他地方。

我们通过MTBBarcodeScanner执行一些条码扫描,并在扫描块,最终结束了与代码扫描这样的:

self.searchController?.decodeBarcode(code) // triggers ajax request, gets cancelled 

delay (0.2) {            
    self?.performSegueWithIdentifier("unwindFromBarcodeScanner", sender: self) 
    self?.scanner?.stopScanning() 
} 

这种延迟()方法是从this SO answer采取的想法,这是我们当我们在展开时试图停止扫描时遇到了一些其他问题。

所以在遇到这个ajax取消问题后,我们尝试将ajax调用移入delay代码块,现在我们不再面临这个被取消的问题。它现在看起来像这样,工作正常:

delay (0.2) {            
    self?.performSegueWithIdentifier("unwindFromBarcodeScanner", sender: self) 
    self?.scanner?.stopScanning() 
    self?.searchController?.decodeBarcode(code) // triggers ajax request, works fine 
}