回过头来看,我们团队可能不是第一个踩此坑的,也不会是最后一个。所以无论是从节约公司研发资源角度,还是从提升用户体验的角度,我们都希望 iOS 团队的兄弟们能尽快升级 WKWebView。我们在撰写这篇文章的时候去苹果官网看了一下,截至2017年7月,iOS 9.0 及以上版本已经占到97%。
▲ 苹果官方的 iOS 版本分布数据(数据截至2017年7月)
开发阶段的跨域问题前端后端分离,又一次把跨域问题摆在了我们面前。页面上线之后与接口是在同一个域下的,只有在开发阶段才面临跨域问题,所以只要把我们自己开发环境的跨域问题解决即可。
早期解决开发阶段的跨域,通常采用给 Chrome 设置启动参数 “–disable-web-security” 禁用浏览器安全策略的办法,可这招在新版本 Chrome 上已经不灵了。再想想,移动端项目不用考虑低版本 PC端浏览器,完全可以采用 CORS(跨域资源共享)技术来实现跨域。对于 GET/POST 这类简单请求来说,只要服务器响应头的 Access-Control-Allow-Origin 字段值包含当前源(协议 域名 端口),支持 CORS 的浏览器便会放行此次请求。既然是开发阶段的问题,我们还是不要麻烦后端同学修改接口了,Chrome 浏览器有个名叫 “Allow-Control-Allow-Origin: *” 的插件,可以自动给服务器响应头加上 “Allow-Control-Allow-Origin: *” ,装上它, Chrome 就可以跨域了。那……其他浏览器呢,当然我们可以说我开发阶段只用 Chrome,可是手机浏览器呢?APP呢?它们可未必有这个插件。
搞清楚 CORS 原理之后会发现这个问题不难解决,没有插件我们可以使用抓包工具来给 response 加上 “Allow-Control-Allow-Origin: *”,比如 fiddler。在 fiddler 菜单中找到 Rules → Customize Rules…,弹出 fiddler 脚本编辑器(第一次按提示安装即可),如下图所示,在 OnBeforeResponse 函数中加上红框中的代码,保存成功之后,fiddler 便会自动给经过它的 response 增加 “Allow-Control-Allow-Origin: *” 了,我们只需要设置好浏览器和手机的代理,让请求和响应经过 fiddler 即可实现跨域。
Flexbox布局问题本次改版的页面布局,大量使用了 CSS3 Flexbox 弹性盒模型。Flexbox 不是什么特别新的技术,但是由于相关规范经历多次迭代,写法不尽相同,而不同时期的浏览器实现了不同版本的规范,这就造成了一些同学对 Flexbox 布局写法和浏览器兼容性的疑惑,迟迟不敢在项目中大规模应用。
其实,算上所有版本规范,移动端对 Flexbox 的支持还是比较好的,不信你看 http://caniuse.com/#search=flexbox。我们完全可以只按照最新的标准来写,然后借助 autoprefixer 等工具来自动补全旧版代码兼容低版本浏览器,主流脚手架、IDE都支持。