1. 程式人生 > >JS實現強制回收記憶體方法兩則

JS實現強制回收記憶體方法兩則

其實標題挺吸引人的,不過無非是發現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本身的回收缺限導致的緩慢。