それは難しいことではありません。ウィンドウの 1 つが閉じられたときにカウントを更新できるように、とにかくウィンドウを追跡する必要があります。
より簡単な方法: ステータスをポーリングします (イベントベースの追跡は悪夢です)。
<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 ミリ秒ごとにチェックし、ウィンドウ オブジェクトが存在しなくなるか、ウィンドウが閉じられると停止します。わかりやすくするためにコンソール スパムを追加しました。
重要カウントは、ページの更新後は存続しません。これは、サーバー側でのみ安全に対処できる問題です。