這並不難。無論如何,您必須跟蹤窗口,以便您可以在其中一個關閉時更新您的計數。
更簡單的方法:輪詢他們的狀態(基於事件的跟蹤是一場噩夢)。
<script>
var openWindows = {};
var openWindow = function (url, name, specs) {
var count = openWindows[name] || 0;
if (count < 5) {
var w = window.open(url, name + count, specs);
var interval = setInterval(function() {
if(!w || w.closed){
clearInterval(interval);
openWindows[name] = openWindows[name] - 1;
console.log('Closed a window for button ' + name);
}
}, 100);
openWindows[name] = count + 1;
}
console.log('Opened a window for button ' + name);
};
</script>
<!-- Usage -->
<input id="btn" name="btn" type="button" onclick="openWindow('http://www.google.it', 'google', 'width=200,height=100');" />
腳本基本上存儲您提供的名稱,改變它,使其獨特的(否則彈出窗口會重疊),當窗口對象不再有開始定時輪詢,檢查每100毫秒,並停止或窗戶關閉。我添加了一些控制檯垃圾郵件,以使其更清晰。
重要計數將無法在刷新頁面時存活。這是一個只能安全照顧服務器端的問題。
爲什麼從可用性的角度來看,你想這樣做?我看不到用戶不會對此感到惱火的情況。 – Tim
@Tim。這是客戶的要求。他們想限制在任何給定時間可以打開的窗口數量。 – ConfusedDiva