从Dom中删除IFrame后,IE9+会回收内存。影响范围:适用于 Internet Explorer 9 以及更高版本。

1. 应用场景(相当隐蔽!!!)

在主页面定义一个全局变量,然后让子页面IFrame内的操作去更新这个值。

1 //主页面
2 top.G_config = {}; //定义了一个全局变量
1 //IFrame页面
2
3 //操作全局变量
4 if('undefined' == typeof(top.G_config['url_list'])){
5 top.G_config['url_list'] = [];
6 }
7 top.G_config['url_list'].push('something');
8 //操作完以后,关闭此IFrame

看起来基本上没什么问题,但是这个IFrame页面时包含在一个弹出窗里面,操作完之后,就会从Dom中移除这个IFrame。有没有注意这行代码:

1 top.G_config['url_list'] = [];

在IFrame中为全局变量top.G_config创建了一个数组,而数组在JS中是一个复杂类型对象。因此,一个全局变量引用了IFrame中创建的一个数组,而这个数组会在IFrame被移除Dom的时候,同时被回收。当第二次打开弹出窗去操作这个全局变量的时候就会报错:不能执行已释放script的代码

2. 如何避免这个问题

1 //主页面
2 top.G_config = {‘url_list’: []}; //定义了一个全局变量
1 //IFrame页面
2
3 //操作全局变量
4 top.G_config['url_list'].push('something');
5
6 //操作完以后,关闭此IFrame

思路:在IFrame页面更新全局变量,避免涉及到值引用问题。

使用JS编码时,尽量不要使用全局变量。无法避免时,一定要慎重,要考率到IFrame中更新全局变量时,不要存在引用关系。

这个Bug非常具有隐蔽性。

不能执行已释放script的代码的更多相关文章

  1. SCRIPT5011:不能执行已释放Script的代码

    环境:win7 64位 IE9 错误:SCRIPT5011:不能执行已释放Script的代码. 现象:在父窗体的close()中调用嵌套的iframe页面的js方法返回一个对象时抛此异常. 原因:在一 ...

  2. WdatePicker 没有权限 不能执行已释放 Script 的代码

    提示 拒绝访问 或 没有权限 或 ' Window.document 或 '$dp' 为空或不是对象 $dp.dd is undefined 之类的错误 SCRIPT70: 没有权限 WdatePic ...

  3. 解决IE11出现异常SCRIPT5011:不能执行已释放Script的代码

    功能概述: 最近做了一个教育科研系统,由于时间比较紧,所以能集成的功能都尽量做到了一起,其中一个上传附件的功能,在基类控制器BaseController 中建了一个Action返回视图,其他需要上传附 ...

  4. IE9出现异常SCRIPT5011:不能执行已释放Script的代码

    今天同事测试系统,突然出现一个异常SCRIPT5011:不能执行已释放Script的代码 应用场景:用模态方式打开个窗口,对于返回对象使用"=="与字符串比较时出现错误 我也用我的 ...

  5. ie11 SCRIPT5011:不能执行已释放Script的代码

    依照我遇到的问题为例: (我的页面结构为:父页面中嵌套有iframe子页面) 1.造成这种情况的原因是:父页面初始化声明变量a为数组(数组对象是引用类型,赋值传递的是地址),创建iframe子页面后给 ...

  6. ie中报错---不能执行已释放 Script 的代码

    我的原因:使用jquery.colorbox.js.在页面中使用弹框,对于父页面中的变量进行修改(弹框页面的js--window.parent.obj.arr= 数组;), 当弹框关闭之后,在父页面中 ...

  7. IE浏览器下错误,不能执行已释放script的代码

    错误提示: 错误原因: 我使用layui打开子页面,用到了父页面中的一个全局变量(我用的数组),子页面关闭后,使用该数组方法(如:arr.join(",")),便提示此错误 我的解 ...

  8. 出现“不能执行已释放的Script代码”错误的原因及解决办法

    很多web开发者或许都遇到过这样的问题,程序莫名奇怪出现“不能执行已释放Script的代码”,错误行1,列1.对于这种消息描述不着边,行列描述更是让人迷茫的js错误,相信是所有调试js程序的朋友们最郁 ...

  9. IE10弹窗showModalDialog关闭之后提示SCRIPT5011:不能执行已释放的Script代码

    在Web开发中,经常使用showModalDialog弹窗 今天遇到一个小问题,IE10中弹窗关闭之后提示SCRIPT5011:不能执行已释放的Script代码 网上搜罗了一些资料,发现大多都提到对象 ...

随机推荐

  1. TXT四则运算计算器 后日谈

    经过了软件工程第一个个人项目——<<四则运算器>>的开发后,对软件开发有了新的认识.题目中并没有明确说明对小数和负数是否应该提供支持.在第一个项目结束后,第二个项目则是针对上一 ...

  2. [Locked] Best Meeting Point

    Best Meeting Point A group of two or more people wants to meet and minimize the total travel distanc ...

  3. linux —— 学习笔记(软件操作:安装、卸载、执行)

    目录: 0.相关基本命令    1.安装软件    2.卸载软件    3.打开软件  0.相关基本命令 与软件操作相关的主要命令有:dpkg  和 apt-get . dpkg   : “dpkg ...

  4. @property的特性

    @property还有一些关键字,它们都是有特殊作用的,比如上述代码中的nonatomic,strong: 1 2 @property(nonatomic,strong) NSString *carN ...

  5. Android中为图标加上数字--用于未读短信数提醒,待更新应用数提醒等

    本文属于原创,转载请著名出处:http://flysnow.iteye.com/blog/906770 写道 在我们开发一些如短消息.应用商店等应用时,会考虑在短消息的图标上加上未读短信的数量,在应用 ...

  6. yii自动登陆的验证机制浅析

    一直在使用yii进行开发, 也知道如何去使用, 也仅仅是知道怎么去用罢了, 终归是没研究过源码, 心里发虚, 今天遇到一个问题, 关于自动登陆的问题. 要求就是, 修改登陆保存session天数为自定 ...

  7. codevs 1689 搭建高塔

    /*机智sort二维转一维*/ #include<iostream> #include<cstdio> #include<cstring> #include< ...

  8. JavaScript设计模式之观察者模式(学习笔记)

    设计模式(Design Pattern)对于软件开发来说其重要性不言而喻,代码可复用.可维护.可扩展一直都是软件工程中的追求!对于我一个学javascript的人来说,理解设计模式似乎有些困难,对仅切 ...

  9. Spring配置静态目录

    mvc-dispatcher-servlet.xml文件 <beans xmlns="http://www.springframework.org/schema/beans" ...

  10. mysql查看binlog日志

    1.语法:(用于在二进制日志中显示事件.如果您不指定’log_name’,则显示第一个二进制日志.LIMIT子句和SELECT语句具有相同的语法.) show binlog events [IN 'l ...