2007-03-12
关于“不能调用已经释放的javascript代码”问题的讨论
问题形成的主要原因
该问题在单一页面里面是不会出现的,而在使用多框架开发的项目中,可能会出现。
问题的关键我下面从一个实例中分析:
我们有一个框架页面frameset,其中框架里面有2个frame, 一个A,一个B。B是隐藏框架,用来保存数据或作其他操作,A是我们看的见的框架。(也可以是都是看的见的框架)。在多框架的情况下,我们经常会遇到框架B里面的函数访问框架A里面的函数的情况。
而框架A又在很随机的情况下手动或通过提交操作刷新了页面(此时B框架是没有刷新的),如果我们B框架里面有一个变量 var bFunc = top.frame[“A”].aFunc; 而aFunc是框架A的一个函数,正常情况下调用bFunc(); 是没有问题的。但是如果框架A重新刷新过,而框架B 没有刷新的情况下就会出现异常,该异常的描述就是 “不能调用已经释放的javascript代码”。
下面是具体代码
Main.html:
a. html
b. html
该问题只是在框架B有重新刷新的情况下,再调用bFunc();方法的时候产生。ps:如果变量bFunc 引用的是框架A的一个变量,则不会出现该问题。
因为javascript的特殊性,对于function类型来说赋值操作都是一个地址引用(其他的变量是拷贝过程)。
而当框架B重新刷新过后,该框架的javascript重新加载近来,以前的代码空间已经释放掉,所以函数及变量地址都已经发生变化,而框架B的变量bFunc 所指向的框架A的函数aFunc地址不变,导致再次调用bFunc();时出现“不能调用已经释放的javascript代码”。
总结:
当我们工程调用框架比较多时候很容易不小心出现这样的隐患, 所以在我们项目中应该尽量少的使用框架,如果实在要用, 则尽量减少框架之间的关系, 避免不必要的麻烦.
ps: 当我们使用 ajax 的 onreadystatechange 回调函数的时候也容易出现这样类似的错误。
上文仅为个人的一点点认识,希望和大家交流, 谢谢
该问题在单一页面里面是不会出现的,而在使用多框架开发的项目中,可能会出现。
问题的关键我下面从一个实例中分析:
我们有一个框架页面frameset,其中框架里面有2个frame, 一个A,一个B。B是隐藏框架,用来保存数据或作其他操作,A是我们看的见的框架。(也可以是都是看的见的框架)。在多框架的情况下,我们经常会遇到框架B里面的函数访问框架A里面的函数的情况。
而框架A又在很随机的情况下手动或通过提交操作刷新了页面(此时B框架是没有刷新的),如果我们B框架里面有一个变量 var bFunc = top.frame[“A”].aFunc; 而aFunc是框架A的一个函数,正常情况下调用bFunc(); 是没有问题的。但是如果框架A重新刷新过,而框架B 没有刷新的情况下就会出现异常,该异常的描述就是 “不能调用已经释放的javascript代码”。
下面是具体代码
Main.html:
<frameset rows="0,*" cols="*" id="myframe" name="myframe" framespacing="0" frameborder="no"> <frame src="a.html " name="A" id="A"> <frame src=”b.html" id="B" name="B"> </frameset>
a. html
<script>
function aFunc(){
alert(“alert”);
}
</script>
b. html
<script> var bFunc = top.frames[“A”].aFunc; </script>
该问题只是在框架B有重新刷新的情况下,再调用bFunc();方法的时候产生。ps:如果变量bFunc 引用的是框架A的一个变量,则不会出现该问题。
因为javascript的特殊性,对于function类型来说赋值操作都是一个地址引用(其他的变量是拷贝过程)。
而当框架B重新刷新过后,该框架的javascript重新加载近来,以前的代码空间已经释放掉,所以函数及变量地址都已经发生变化,而框架B的变量bFunc 所指向的框架A的函数aFunc地址不变,导致再次调用bFunc();时出现“不能调用已经释放的javascript代码”。
总结:
当我们工程调用框架比较多时候很容易不小心出现这样的隐患, 所以在我们项目中应该尽量少的使用框架,如果实在要用, 则尽量减少框架之间的关系, 避免不必要的麻烦.
ps: 当我们使用 ajax 的 onreadystatechange 回调函数的时候也容易出现这样类似的错误。
上文仅为个人的一点点认识,希望和大家交流, 谢谢
- 浏览: 10358 次
- 性别:

- 来自: 湖北武汉北京

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
[分享]文件上传组件的应 ...
caihemm 写道乱七八糟,doc作的太差 广告太多 不看了 my god ...
-- by cozone_柯中 -
[分享]文件上传组件的应 ...
昏。写好的文字。怎么都不见了 ?
-- by cozone_柯中 -
陪伴我们度过童年的100部 ...
"邋遢大王"里小女孩的裙子短得有点过分了...
-- by icetortoise -
陪伴我们度过童年的100部 ...
大部分都看过鸟,哈哈,小时候的最爱。 PS...本贴用页面下方的“快速回复”回 ...
-- by lix23 -
陪伴我们度过童年的100部 ...
只看了一小部分
-- by 小疯子






评论排行榜