1.动态加载script标签,使用onload还有onreadystatechange事件做兼容,在ie9,ie10下会导致方法被触发两次
就类似这种写法:
script.onload = script.onreadystatechange = function(){
if(!this.readyState||this.readyState == 'loaded'||this.readyState == 'complete'){
//这个loaded状态会被出发两次导致接下来的代码被多次执行,我的解决方案就是加开关
}
}
这里说明一下onload事件在ie7,8是不支持的,那个项目比较坑,需要兼容到ie7.
2.使用es6的let的时候,如果你用了babel,尽量不要用同名的变量,虽然如果浏览器直接执行es6没有问题,但是一旦babel成了es5,会出现一些变量被莫名其妙覆盖的蜜汁问题,尤其用sourcemap看的话好像又是在执行源代码
if(****){
let aaa = *****;
}else{
// 不要使用同名变量,如果你用了babel转码
let aaa = ********;
}
3.这个坑是别人遇到的,不兼容es6的浏览器,不要用正则的后行断言。
4.用webpack打包自己写热更新的时候,react不能自动更新,这个坑是因为你在模板页面引入js文件使用的绝对路径,他那个热更新只是把代码打到内存里面去了,并没有更改到文件,在页面将绝对路径的链接之改成那个文件名一般就可以了,他就会去内存里去加载热更新的代码。
5.这个是在学习过程中了解的,不要相信网上说的什么seajs循环依赖的解决,他根本就没解决这个问题,他只是改变了模块的状态为完成,但是你的代码是没办法执行的,说白了就是没报错而已,但是你出现循环依赖的代码是不会被执行到了~(当然,现在新项目应该不会用到seajs还有requirejs这种加载器了)
6.诡异的iframe跨域问题,有些项目需要外接公司其他的脚本,例如一些公共头尾,然后有一天用iframe做的图片上传突然出问题了,经查看后发现是外部脚本把window.domain改成了公司的一级域名,而iframe本身还是我项目的域名,也在iframe加载的js脚本里面更改一下window.domain就可以了,但是这种问题真的挺坑的......
7.这是个很久之前遇到的坑,就是使用jquery动态加载的html标签没能绑定上事件,其实这种问题很多人都遇到过,使用事件代理用on把方法绑定到父级元素就没问题了(别小看jquery,当你需要兼容低版本ie的时候会发现jquery还是很可爱的)