iOS 9 WKWebView产生"无法加载资源:已取消" iOS 8没有的地方

时间:2015-10-20 15:09:03

标签: ios ajax ios9 wkwebview

我正在使用支持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并不容易。

1 个答案:

答案 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