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


Posted in Javascript onSeptember 09, 2007

很多web开发者或许都遇到过这样的问题,程序莫名奇怪出现“不能执行已释放Script的代码”,错误行1,列1.对于这种消息描述不着边,行列描述更是让人迷茫的js错误,相信是所有调试js程序的朋友们最郁闷也最憎恨的事情!遇到这种问题,最简单的办法直接把错误贴到baidu或google那个小输入框中让他们先给点指点,再去解决,可这次却没有这么容易,在baidu搜索似乎很多人都遇到过这种问题,但是都是些什么qq空间错误,狂晕,或者就是只有问没有答的,闷!

   这种错误从何调起?后面没办法,又是猜测又是try...catch蹦错误,找了半天终于找到错误的位置,可是发现写的并没有什么问题,后来绞尽脑汁思考程序的解释过程,确依旧没有什么头绪。继续baidu,突然在某网页中看到一句话:当一个页面关闭时会自动释放页面的js。短短一句话给了我不小的启发。检查我的程序是否有页面的关闭或转向,发现是执行了转向,然后再回到这个页面时出现了错误。突然间觉得明白了。

场景:页面有a和b两个框架页iframe,在b页面中通过js将一个函数引用(函数指针)传入到a页面并保存在a页面的一个变量中,a页面可以通过这个引用操作b页面或执行b页面的一些程序,记住:此时在a页面中的变量保存的是b页面某函数的指针(内存地址),当b页面刷新或重定向后由于b页面重新构建,所以b页面中的函数指针就发生了变化,但a中仍然保存着b页面刷新前传过来的指针(内存地址),这时a页面中变量通过所指向的指针地址就无法访问到b页面中对应的函数了(因为函数指针地址已经发生了变化,及原来的内存指针已经释放),这样在执行时就会出现“不能执行已经释放的Script代码”的错误。

解决办法:在a页面中加上容错处理,当引用出现错误时要将保存的引用(函数指针)清空或指向一个默认的函数。另外在b页面再次载入时要重新给a页面传送函数引用,这样就不会出现这样的错误了。

或许这里的描述有些过于抽象了,看一个演示再看看代码就容易明白了,先test,然后return url,之后再test就会出现这个问题了。

Javascript 相关文章推荐
简单谈谈JavaScript的同步与异步
Dec 31 Javascript
jquery.validate表单验证插件使用方法解析
Nov 07 Javascript
jQuery的extend方法【三种】
Dec 14 Javascript
javascript容错处理代码(屏蔽js错误)
Jan 20 Javascript
JS实现移动端实时监听输入框变化的实例代码
Apr 12 Javascript
jQuery为某个div加入行样式
Jun 09 jQuery
Vue 将后台传过来的带html字段的字符串转换为 HTML
Mar 29 Javascript
Vuex mutitons和actions初使用详解
Mar 04 Javascript
在Vue项目中使用jsencrypt.js对数据进行加密传输的方法
Apr 17 Javascript
JS实现长图上下滚动效果
Mar 19 Javascript
vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)
Jul 27 Javascript
JS指定音频audio在某个时间点进行播放
Nov 28 Javascript
超强的IE背景图片闪烁(抖动)的解决办法
Sep 09 #Javascript
IE不出现Flash激活框的小发现的js实现方法
Sep 07 #Javascript
用javascript实现画板的代码
Sep 05 #Javascript
js中的escape及unescape函数的php实现代码
Sep 04 #Javascript
一个符号插入器 中用到的js代码
Sep 04 #Javascript
【消息提示组件】,兼容IE6/7&&FF2
Sep 04 #Javascript
一个用js实现控制台控件的代码
Sep 04 #Javascript
You might like
PHP 中的一些经验积累
2006/10/09 PHP
IE 缓存策略的BUG的解决方法
2007/07/21 Javascript
JMenuTab简单使用说明
2008/03/13 Javascript
JavaScript中Object和Function的关系小结
2009/09/26 Javascript
javascript 正则替换 replace(regExp, function)用法
2010/05/22 Javascript
js函数获取html中className所在的内容并去除标签
2013/09/08 Javascript
jQuery实现返回顶部效果的方法
2015/05/29 Javascript
Angular外部使用js调用Angular控制器中的函数方法或变量用法示例
2016/08/05 Javascript
JavaScript数组去重的6个方法
2017/01/21 Javascript
利用angularjs1.4制作的简易滑动门效果
2017/02/28 Javascript
详解JavaScript对象的深浅复制
2017/03/30 Javascript
微信小程序动态的加载数据实例代码
2017/04/14 Javascript
Three.js基础学习之场景对象
2017/09/27 Javascript
js实现左右两侧浮动广告
2018/07/09 Javascript
vue中axios请求的封装实例代码
2019/03/23 Javascript
react native 仿微信聊天室实例代码
2019/09/17 Javascript
JavaScript Dom 绑定事件操作实例详解
2019/10/02 Javascript
vue父子组件间引用之$parent、$children
2020/05/20 Javascript
JS变量提升原理与用法实例浅析
2020/05/22 Javascript
vue+iview实现文件上传
2020/11/17 Vue.js
详解实现vue的数据响应式原理
2021/01/20 Vue.js
python中的计时器timeit的使用方法
2017/10/20 Python
使用pandas read_table读取csv文件的方法
2018/07/04 Python
python 读取文件并把矩阵转成numpy的两种方法
2019/02/12 Python
PySide和PyQt加载ui文件的两种方法
2019/02/27 Python
python numpy数组复制使用实例解析
2020/01/10 Python
JINS眼镜官方网站:日本最大的眼镜邮购
2016/10/14 全球购物
李维斯法国官网:Levi’s法国
2019/07/13 全球购物
加拿大拼图大师:Puzzle Master
2020/12/28 全球购物
函授自我鉴定
2013/11/06 职场文书
荷叶母亲教学反思
2014/04/30 职场文书
学校安全管理责任书
2014/07/23 职场文书
民主评议党员工作总结
2014/10/20 职场文书
委托收款证明
2015/06/23 职场文书
护士工作心得体会
2016/01/25 职场文书
请假条应该怎么写?
2019/06/24 职场文书