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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29329521/article/details/82700393

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真坑!

猜你喜欢

转载自blog.csdn.net/qq_29329521/article/details/82700393