“不能执行已释放的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 相关文章推荐
Iframe 自动适应页面的高度示例代码
Feb 26 Javascript
JavaScript 数组- Array的方法总结(推荐)
Jul 21 Javascript
分享一个原生的JavaScript拖动方法
Sep 25 Javascript
简单实现node.js图片上传
Dec 18 Javascript
js 获取元素的具体样式信息getcss(实例讲解)
Jul 05 Javascript
vue 使用ref 让父组件调用子组件的方法
Feb 08 Javascript
浅谈vue中.vue文件解析流程
Apr 24 Javascript
详解webpack的proxyTable无效的解决方案
Jun 15 Javascript
vue-cli3 从搭建到优化的详细步骤
Jan 20 Javascript
VUE+Element环境搭建与安装的方法步骤
Jan 24 Javascript
HTML元素拖拽功能实现的完整实例
Dec 04 Javascript
详解Vue的异步更新实现原理
Dec 22 Vue.js
超强的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生成Flash动画的实现代码
2010/03/12 PHP
php表单提交问题的解决方法
2011/04/12 PHP
php+mysqli实现批量执行插入、更新及删除数据的方法
2015/01/29 PHP
PHP中SQL查询语句的id=%d解释(推荐)
2016/12/10 PHP
PHP查询分页的实现代码
2017/06/09 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
Nginx+php配置文件及原理解析
2020/12/09 PHP
javascript 显示当前系统时间代码
2009/12/28 Javascript
解析Jquery取得iframe中元素的几种方法
2013/07/04 Javascript
js中的前绑定和后绑定详解
2013/08/01 Javascript
深入理解javascript中return的作用
2013/12/30 Javascript
Nodejs进程管理模块forever详解
2014/06/01 NodeJs
node.js中的fs.close方法使用说明
2014/12/17 Javascript
Jquery $when done then的用法详解
2016/05/20 Javascript
Vue获取DOM元素样式和样式更改示例
2017/03/07 Javascript
基于Vue中点击组件外关闭组件的实现方法
2018/03/06 Javascript
JavaScript创建对象方法实例小结
2018/09/03 Javascript
node.js域名解析实现方法详解
2019/11/05 Javascript
Python中的pprint折腾记
2015/01/21 Python
对于Python的Django框架部署的一些建议
2015/04/09 Python
Python正则表达式知识汇总
2017/09/22 Python
Python学习笔记之if语句的使用示例
2017/10/23 Python
Python使用jsonpath-rw模块处理Json对象操作示例
2018/07/31 Python
Python字典的核心底层原理讲解
2019/01/24 Python
两个元祖T1=('a', 'b'),T2=('c', 'd')使用匿名函数将其转变成[{'a': 'c'},{'b': 'd'}]的几种方法
2019/03/05 Python
python等差数列求和公式前 100 项的和实例
2020/02/25 Python
用 Python 制作地球仪的方法
2020/04/24 Python
Python 多进程原理及实现
2020/12/21 Python
CSS3条纹背景制作的实战攻略
2016/05/31 HTML / CSS
使用CSS3制作版头动画效果
2020/12/24 HTML / CSS
客服主管岗位职责
2013/12/13 职场文书
迎新晚会主持词
2014/03/24 职场文书
交通事故和解协议书
2015/01/27 职场文书
PyQt5结合QtDesigner实现文本框读写操作
2021/06/11 Python
python利用pandas分析学生期末成绩实例代码
2021/07/09 Python
解决vue-router的beforeRouteUpdate不能触发
2022/04/14 Vue.js