IE下js报错:不能执行已释放的script代码

1,错误发生(只在IE发生)

        在父页面打开了某个子页面(iframe),子页面去操作父页面的全局变量,关闭子页面后再次调用该全局变量,此时发生错误。

//父页面全局变量
var list=[1,2,3];
//子页面(iframe)
if(checkSomething()){
    window.parent.list=[];
}
//关闭子页面
close();

看起来是没用任何问题的,在Google,Firefox上也确实没问题,但是,,,

IE9及以上IE浏览器会在iframe子页面关闭时在dom节点移除iframe,因为在iframe里执行window.parent.list=[],是给其重新创建一个新数组,因此iframe被移除后,该数组也被回收,所以在父页面再次调这个变量,就会报错:不能执行已释放的script代码;

2:解决方法

        解决方法其实就是要避免在子页面创建新数组而使变量引用来自子页面,修改父页面全局变量其实是没问题的,父页面关闭前不会被回收,因此只需要修改重置数组方式。

//子页面(iframe)
if(checkSomething()){
    window.parent.list.length=0;
}
//关闭子页面
close();

     在使用全局变量的时候还是要谨慎!!!

 

总结:IE真坑!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值