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代码: 0URI: http://××××/ui_component/gt-grid/gt_grid_all.js
?
根据提示找到了如下代码:
?
?
解释一下:
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对象,需要考虑对象释放问题。