关于配置脚本的“不能执行已释放Script的代码”的问题

2008年10月14日

这是由于脚本把某些原本在top中定义的函数用bottom中脚本的函数来替换,而当bottom区重新装载的时候脚本也随之重载,在重载没有完成的时候如果遇到这些函数的调用就会出现“不能执行已释放Script的代码”的错误。
解决办法是:在进行函数替换之前,先把原来的函数以另一个名字保存,当bottom区重载的时候用window.onunload事件触发把函数替换回原来在top中的定义。
例子代码如下:

?View Code JAVASCRIPT
var old_func_write_new;
var old_func_writemiclist;
var old_func_writecv;
var old_func_writeu1;
var old_func_writecv_new;
var old_func_writev_new;
var old_func_Users_Add;
var old_func_Users_Add1;
var old_func_Users_Del;
var old_func_addusertolist;
var old_func_deluserfromlist;
 
function replace_functions(){
   old_func_write_new=parent.write_new;
   old_func_writemiclist=parent.writemiclist;
   old_func_writecv=parent.writecv;
   old_func_writeu1=parent.writeu1;
   old_func_writecv_new=parent.writecv_new;
   old_func_writev_new=parent.writev_new;
   old_func_Users_Add=parent.Users_Add;
   old_func_Users_Add1=parent.Users_Add1;
   old_func_Users_Del=parent.Users_Del;
   old_func_addusertolist=parent.addusertolist;
   old_func_deluserfromlist=parent.deluserfromlist;
   parent.write_new=writelist;//重新聊友列表
   parent.writemiclist = writemiclist;//重写麦序区
   parent.writecv = writecv;//重写语音区代码
   parent.writeu1 = writeu1;//重写分屏区
   parent.writecv_new=writecv;
   parent.writev_new = writev_new;
   parent.Users_Add = Users_Add;
   parent.Users_Add1 = Users_Add1;
   parent.Users_Del = Users_Del;
   parent.addusertolist = addusertolist;
   parent.deluserfromlist = deluserfromlist;
}
 
function recover_functions(){
parent.write_new=old_func_write_new;
parent.writemiclist = old_func_writemiclist;
parent.writecv = old_func_writecv;
parent.writeu1 = old_func_writeu1;
parent.writecv_new=old_func_writecv_new;
parent.writev_new = old_func_writev_new;
parent.Users_Add = old_func_Users_Add;
parent.Users_Add1 = old_func_Users_Add1;
parent.Users_Del = old_func_Users_Del;
parent.addusertolist = old_func_addusertolist;
parent.deluserfromlist = old_func_deluserfromlist;
}
 
function init_system()
{
window.onerror=new Function("return true");
.
.
replace_functions();
window.onunload=recover_functions;
.
.
}

特别对于象”Users_Add”这样的函数在bottom刷新的时候正好是用户状态改变的时候,例如上管的情况,就会被调用。





标签: ,
归类: BCHAT

Leave a Reply

*

您也可以使用微博账号登陆