JS实现强制回收内存方法两则

来源:互联网 发布:verizon的网络制式全网 编辑:程序博客网 时间:2024/05/29 17:58
其实标题挺吸引人的,不过无非是发现IE内核的浏览器在最小化时,会自动回收内存


那么,所要做的理论上挺简单:先把目标页面窗最小化,然后再最大化或还原。


挺难的。。。。其实挺难的


本想一步到位,用clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11这个东东来完成


<object id="winMin" classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">
<param name="Command" value="Minimize"></object>
<object id="winMax" classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">
<param name="Command" value="Maximize"></object>
<object id="winClo" classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">
<param name="Command" value="Close"></object>
<input type="button" value="最小化" onclick=winMin.Click()>
<input type="button" value="最大化" onclick=winMax.Click()>
<input type="button" value="关闭" onclick=winClo.Click()>


这样最小化和最大化功能都有了,然后自己写个函数


<input type="button" value="11111111" onclick="test();"> 
<script>
var pub_resize=false;


function test(){
 winMin.Click();
 window.focus();
 window.onresize=function(){
  if(pub_resize==false){winMax.Click();}
  pub_resize=true;
 }
 alert("成功地强制回收了内存资源,请点击“确定”!")
}
</script>


搞定了。。。。。。但是,这个控件MS考虑到它的安全性,这三种功能在本地做成页面TEST是可以的,但用虚拟目录或服务器http://一测就会发现,不可行了


---------------------


那么。。还有一种方法,最小化可以用JS的window.blur();来实现,然后发现IE6可以,IE7没有反应,本想IE6就IE6吧,但又发现任务管理器的显示它还是没有回收内存,就是说它是最小化,但没有达成IE回收内存资源的标准,回收程序没有执行。


我不是做网站的,尽管我也得做页面,于是我只能来硬的了,这就是做WEB系统比网站的好处,我们可以要求用户按我们的一些规则来,当然,我们也在提升交互感受


设想用WScript.Shell来完成,用它来发送模拟键值把窗体最小化,然后再用JS的某些方法最大化达到目的,那么我们开始吧(注意:用WScript.Shell浏览器会提示你:在此页使用ACTIVX控件是不安全的等等):


<script>
function full(){//IE6
 var WshShell = new ActiveXObject("WScript.Shell"); 
 WshShell.sendKeys("%"+"{ }");
 WshShell.sendKeys("{n}");
 window.setTimeout("window.open(\"qqq.html\",\"_banlk\",\"\")",0);
}
</script>
<input  type=button onclick=full(); value="最小化">


先引用WScript.Shell,然后发送alt+空格(你对着一个网页用这个快捷键试试),然后应当有一个提示“最小化窗体(n)”,然后我就发送了一个n,于是,窗体成功最小化了,然后用setTimeout设了一个时间差来执行打开一个自定义页面,qqq.html的源码如下:


<script>
function ttt(){
 window.opener.focus();
 window.close();
 return false();
}
ttt();
</script>


 window.opener.focus();是设父窗体为当前获得焦点的窗体(就是上面我们让它最小化的那个)


然后关闭这个弹出页,不提示


 


目前在IE6上测试通过,其它如IE7,傲游2在回收上也是可以的,因为最小化是成功的,但后面这个弹出窗激活父窗这个功能我还在研究中,因为它们是卡片式浏览器的原故吧


 -----------------


贴几个关键的键值:Shift/Ctrl/Alt


//Shift---------WshShell.SendKeys "+" 
//Ctrl---------WshShell.SendKeys "^" 
//Alt---------WshShell.SendKeys "%"


--------------------


设想在系统里定时执行,比如2小时执行一次,当然,也支持用户手动执行,那么可以改善部分因为IE本身的回收缺限导致的缓慢。