提示“不能执行已释放Script的代码”

peterHunter 2007-06-13 10:53:42
代码如下:
...............
<script type="text/javascript" src="aa.js"></script>
<script language="JavaScript">
var oldwd;

function mainToGraph() {
if oldwd) {
oldwd.toGraph();
}
}
................

在aa.js中,对wd进行了赋值,是一个window对象,并且调用了其toGraph函数
var mWd

function getInfo(wd) {
.....
mWd = wd;
oldwd = wd;
}

function aaToGraph() {
mWd .toGraph();
}

在另外一个iframe中(代号B),调用了这个getInfo函数,
function toMain(){
........................
parent.frames["main"].window.getInfo(window);
}

function toGraph() {
.......
}

在B中,有一个toGraph函数,当我在aa.js中调用这个函数(执行aaToGraph)是可以,但是在Main页面中调用(执行mainToGraph)就不行了,提示没有这个属性,如果将aa.js中的getInfo函数改成:
function getInfo(wd) {
.....
mWd = wd;
oldwd = wd.toGraph;//直接把函数赋值给oldwd
}
那么在Main中,alert这个oldwd,是一个object,而不是函数代码,如果执行oldwd,会提示“不能执行已释放Script的代码”,请问各位大虾,这个怎么回事
...全文
1255 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
laocan 2008-03-12
  • 打赏
  • 举报
回复
很多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就会出现这个问题了。
本文来自: 脚本之家(www.jb51.net) 详细出处参考:http://www.jb51.net/article/11311.htm
hbhbhbhbhb1021 2007-06-14
  • 打赏
  • 举报
回复
感觉最好重新架构下,函数最好别跨窗口调用,跨窗口调用HTML元素要容易些
peterHunter 2007-06-14
  • 打赏
  • 举报
回复
源代码太多,贴不下,基本情况就是我在1楼贴的代码
我要实现的目的就是跨iframe调用,但是无论是使用全局变量传值,还是直接使用parent.frames[i].window.functionName(),都无法调用另外一个iframe的函数
peterHunter 2007-06-14
  • 打赏
  • 举报
回复
楼上的,我没有重写系统方法,我在一个页面里用
<script type="text/javascript" src="aa.js"></script>引用了一个脚本文件,在这个文件中调用另外一个iframe里的函数是可以的,但是在页面本身中调用不成功,aa中有一个取值函数,由iframe调用,将其window对象赋值到aa中,如果赋值的不是window对象,而直接将函数赋值过来,在aa中同样正确,但是在页面本身中,提示那个错误,如果alert赋值过来的函数,是一个object,而不是其代码,
hbhbhbhbhb1021 2007-06-13
  • 打赏
  • 举报
回复
程序不全,根本看不出来,报这个错误有可能是对系统方法做了重写
再次调用系统方法的时候,并且写法不当就会出这个错误
如果没有写的话,检查下是否有关键字被使用了
hy_lihuan 2007-06-13
  • 打赏
  • 举报
回复
不知道,帮你顶
peterHunter 2007-06-13
  • 打赏
  • 举报
回复
up,有人回答吗

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧