ymprompt异常使用引发”消息: 不能执行已释放 Script 的代码“

ymprompt错误使用引发”消息: 不能执行已释放 Script 的代码“

新产品中在一些列表页面经常出现以下错误(为什么是列表,稍后解释)

网页错误详细信息

用户代理: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; qdesk 2.3.1186.202; QQDownload 718; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3)
时间戳: Mon, 8 Apr 2013 07:36:25 UTC


消息: 不能执行已释放 Script 的代码
行: 3848
字符: 3
代码: 0
URI: http://××××/ui_component/gt-grid/gt_grid_all.js

 

根据提示找到了如下代码:


ymprompt异常使用引发”消息: 不能执行已释放 Script 的代码“

 

 

解释一下:

1. 为什么是表格组件出问题了,和ymprompt有什么关系?

公司使用的是gt_grid表格组件,但是他的错误提示框和系统整体风格不统一,因此修改了源码,使用ymprompt组件作为弹出框。

 

2. ”不能执行已释放 Script 的代码“的原因

理论上网比较多,就是两个页面都引用了同一对象,其中一个关闭页面就会释放该对象,另一个页面再使用时就会报这个错误。

比如ymprompt使用时,不需要声明变量,因为组件自带了一个公共对象:

/**
 * ymPrompt.js 消息提示组件
 * @author netman8410@163.com
 */

var ymPrompt={
    version:'2.01',
    pubDate:'2008-07-21',
	show:function(args){this.initCallCfg=args}
};

 

3. 我们的项目为什么会引用同一ympromt对象,如何解决?

为了减少页面编写对js和css的应用,项目建立了一个公共的jsp页面,里面引用各类公共组件和样式,所以不同页面引用了同一个ymprompt,导致问题的产生。

 

修复方法很简单:将ymprompt组件的引用分别放到不同页面,每个页面持有自己的ymprompt对象就可以了。

 

 

总结:

项目中如果使用公共页面引用js组件或声明js对象,需要考虑对象释放问题。