iOS 9 WKWebView 产生 "failed to load resource: cancelled" 其中 iOS 8 没有

iOS 9 WKWebView yields "failed to load resource: cancelled" where iOS 8 doesn't

我正在开发一个支持 iOS 8 和 9 的应用程序,在我的应用程序中使用 WKWebView 获取一些视图。

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

我的本机代码在我的 WKWebView 中调用一个 javascript 函数,该函数使用 jQuery.

触发 ajax GET 请求

在iOS8中,每次都有效

在iOS9中,它只是有时有效。貌似还不到一半。

当我在 iPhone 连接到的桌面上使用 Safari Developer Console 连接到 WKWebView 时,我看到了这个错误:

Failed to load resource: cancelled

据我所知,网络请求从未发出过。我已经盯着这个问题 2 天了,我无法辨别为什么网络请求是 "cancelled." 在某些情况下我确实在我的 ajax 请求上调用 .abort() ,但是虽然我诊断出这个问题,我已经评论了所有这些问题。

有没有其他人在 iOS 9 中遇到过 iOS 8 中没有发生的任何新的 ajax 问题?

知道如何找出 "cancelling" 和 ajax 请求吗?我已经尝试了所有我能想到的调试技巧,但是调试 WKWebView 并不是那么容易 ajax.

我不能确定为什么下面的更改为我们解决了这个问题,但请尝试解释我们所做的,以便您了解它如何适用于其他地方。

我们正在通过 MTBBarcodeScanner 执行一些条形码扫描,在扫描块中,最终使用如下代码结束扫描:

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

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

这种 delay() 技术是取自 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
}