我正在使用支持iOS 8和9的应用程序,在我的应用程序中使用WKWebView查看某些视图。
暂时我已将我的网站和子域列入ATS白名单(等待一些SSL证书更改)。所以我不认为我要描述的内容与ATS有关,但谁知道。
我的本机代码在我的WKWebView中调用javascript函数,该函数使用jQuery触发ajax GET请求。
在iOS 8中,它每次都有效。
在iOS 9中,它有时只能运行。似乎不到一半的时间。
当我在我的iPhone连接的桌面上使用Safari Developer Console时,为了连接到WKWebView,我能够看到这个错误:
)
据我所知,网络请求从未发出过。我现在已经盯着这个问题2天了,并且无法辨别为什么网络请求被取消了。"在某些情况下我会对我的ajax请求调用.abort(),但在我诊断出这个问题时,我已经对所有这些问题进行了评论。
还有其他人在iOS 9中遇到过像iOS 8这样的新的ajax问题吗?
任何想法我怎么能弄清楚什么是"取消" ajax请求?我已经尝试了我能想到的每一个调试技巧,但调试WKWebView ajax并不容易。
答案 0 :(得分:1)
我无法确切地说为什么下面的更改为我们解决了问题,但只是尝试解释我们做了什么,以便您可以看到它可能适用于其他地方。
我们正在通过MTBBarcodeScanner执行一些条形码扫描,并且在扫描块中,最终使用以下代码结束扫描:
uint16_t div10(uint16_t dividend) {
uint16_t quotient = 0;
#define div10_step(n) \
do { if (dividend >= (n*10)) { quotient += n; dividend -= n*10; } } while (0)
div10_step(0x1000);
div10_step(0x0800);
div10_step(0x0400);
div10_step(0x0200);
div10_step(0x0100);
div10_step(0x0080);
div10_step(0x0040);
div10_step(0x0020);
div10_step(0x0010);
div10_step(0x0008);
div10_step(0x0004);
div10_step(0x0002);
div10_step(0x0001);
#undef div10_step
if (dividend >= 5) ++quotient; // round the result (optional)
return quotient;
}
这种延迟()技术是从this SO answer获取的一个想法,我们实现这个想法,因为当我们在展开时尝试停止扫描时遇到了一些其他问题。
所以在遇到这个ajax取消问题之后,我们尝试将ajax调用下移到self.searchController?.decodeBarcode(code) // triggers ajax request, gets cancelled
delay (0.2) {
self?.performSegueWithIdentifier("unwindFromBarcodeScanner", sender: self)
self?.scanner?.stopScanning()
}
代码块中,现在我们不再面对它被取消的问题了。它现在看起来像这样,工作正常:
delay