-1

クリックするとウィンドウを開くリンクを含むasp.netアプリケーションがあります

例:
<a href="url" onclick="window.open(url, name, parameters)">

これはうまくいきます。必要に応じてウィンドウを開きます。私が欲しいのは、リンクがクリックされた回数だけ別のウィンドウでウィンドウを開くアプリケーションです。

最初のクリックで最初のウィンドウが開きます。
2 回目のクリックで、同じリンクの 2 番目のウィンドウが開きます。
3 回目のクリックで、同じリンクの 3 番目のウィンドウが開きます。

クリックごとに 1 つのウィンドウで、同じリンクの最大 5 つのウィンドウを開くことができます。可能であれば、どうすればこれを達成できますか?

4

2 に答える 2

1

それは難しいことではありません。ウィンドウの 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 ミリ秒ごとにチェックし、ウィンドウ オブジェクトが存在しなくなるか、ウィンドウが閉じられると停止します。わかりやすくするためにコンソール スパムを追加しました。

重要カウントは、ページの更新後は存続しません。これは、サーバー側でのみ安全に対処できる問題です。

于 2013-09-23T12:31:20.703 に答える
0

リンク付きのリストがあり、それはカウントです。クリックするたびにリスト内のリンクを見つけようとし、カウントを増やします。リストにリンクが見つからない場合は、カウント 1 でリストに追加します。

    <a href="url" onclick="openWindow(url, name, parameters)">

    <script>
    var countLinkPair = [];

    function openWindow(url, name, parameters)
    {
        var flag = false;
        for (var i = 0; i < countLinkPair.length; i++) {
            var obj = countLinkPair[i];
            if (obj.link == url) {
                if (obj.count<=5) {
                    window.open(url, name, parameters);
                }
                obj.count++;
                flag = true;
                break;
            }
        }

        if (!flag) {
            countLinkPair.push({link:url, count:1});
        }
    }
    </script>
于 2013-09-23T11:31:59.047 に答える