这几天Hybrid应用涉及到了几个ajax请求,iOS是可以请求成功的,把html页面用safari打开也是可以请求成功,但是Andriod死活不成功而是直接进入error方法,本来还以为是Andriod代码配置的问题,后来才知道是跨域导致的,而跨域问题是在ajax侧配置的。
那么问题来了,为什么iOS在没有进行跨域配置的情况下就直接请求成功了呢???
原因:因为在加载html界面时用的是UIWebView,这才是问题的关键。
UIWebView是UIKit下内置的浏览器控件,是渲染引擎和JS引擎的组合。系统自带的Safari浏览器也是通过UIWebView实现。
最最关键的———UIWebViw是支持跨域的。。。。。知道真相的我也是红红火火恍恍惚惚了!
给我惊喜的不止这个,还有WKWebView这个小婊砸!
在WWDC 2014发布会上发布iOS 8中,apple公布了WebKit框架,这意味着OSX和IOS开发者将共用同样的开发库,新改变可以提高开发者编写的代码的重复使用性。WebKit框架使用WKWebView来代替IOS的UIWebView和OSX的WebView,并且使用Nitro JavaScript引擎,这意味着所有第三方浏览器运行JavaScript将会跟safari一样快。
但是WebKit对跨域进行了安全检查限制,不允许跨域,所以要对不能跨域的链接单独处理。
如果你还想了解更多关于UIWebView和WKWebView的话,可以看下这篇文章,写的挺不错:从UIWebView到WKWebView