这并不难。无论如何,您必须跟踪窗口,以便在其中一个窗口关闭时更新您的计数。
更简单的方法:轮询他们的状态(基于事件的跟踪是一场噩梦)。
<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 毫秒检查一次,并在窗口对象不再存在或窗口关闭时停止。我添加了一些控制台垃圾邮件以使其更清晰。
重要计数不会在页面刷新后继续存在。这是一个只能在服务器端安全处理的问题。