坑爹的ie,作为小组leader,尼玛,小伙伴儿们不乐意做的事情,我来做好了。。心累、、、
如果,各位同学有定制开发ie6-8版本的需求,还是尽量不要用单页应用模式了,也不要用avalon这类mvvm框架了,也不是不能做,这种mvvm模式写起来还是挺爽的。
只是一旦在 ie6上遇到奇葩问题,你会很闹心,这个风险在工期约束比较紧的情况下,尤其需要注意。
基础框架
本项目为单页应用,框架搭建为:avalon(双向数据绑定)+requireJS(js及模板动态加载)+director(路由管理)
avalon
- 只用到了数据绑定和指令,其他如组件等未使用
requireJS
- 业务代码(js&&html)模块化加载
- html模板动态加载使用require的插件text.js实现
注:css在scss中引入命名空间,实现的模块管理(原则上也可以做require动态加载,但是没大必要了)
director.js
- 非常优秀的路由管理库。git地址:https://github.com/flatiron/director.js (调研过竞品page.js,其开发文档以及ie6-8支持度远不如其文档描述的那样友好,果断放弃)
- 一些源码改动。因为业务中需要设置document.domain,这会导致ie6-8中操作或者访问location对象或者iframe时遇到不同程度的“拒绝访问”限制,所以,手动修改了director.js的源码,改动部分见内网项目
js&&css 兼容性
最佳实践:
尽量避开使用ie6-8不支持的特性(如css属性选择器等等等等),因为多数polyfill并不像他们声称的那样靠谱(比如ieBetter、selectivizr)
一些可用的polyfill
少量代码段 一些特性几句代码即可支持,如html5标签支持、IE6背景图闪烁
es6-promise
jquery.placeholder(不是特完美)