JS實現強制回收記憶體方法兩則
阿新 • • 發佈:2019-02-20
其實標題挺吸引人的,不過無非是發現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本身的回收缺限導致的緩慢。
那麼,所要做的理論上挺簡單:先把目標頁面窗最小化,然後再最大化或還原。
挺難的。。。。其實挺難的
本想一步到位,用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本身的回收缺限導致的緩慢。