写前端遇到的那些坑

5 篇文章 0 订阅
3 篇文章 0 订阅

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还是很可爱的)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值