每次点击时都会打开一个新窗口以获取链接

本文关键字:新窗口 一个 窗口 链接 获取 | 更新日期: 2023-09-27 18:32:35

我有一个 asp.net 应用程序,其中包含一个链接,单击后会打开一个窗口。

例:

这工作正常。它会根据需要打开一个窗口。我想要的是应用程序在单击链接时打开窗口的次数,并在单独的窗口中打开窗口。

第一次单击将打开第一个窗口。
第二次单击将打开同一链接的第二个窗口。
第三次单击将打开同一链接的第三个窗口。

我希望每次单击最多打开 5 个相同链接的窗口,一个窗口。如果可能的话,我将如何实现这一目标?

每次点击时都会打开一个新窗口以获取链接

这并不难。无论如何,您必须跟踪窗口,以便在其中一个窗口关闭时能够更新计数。

更简单的方法:轮询他们的状态(基于事件的跟踪是一场噩梦)。

<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 毫秒检查一次,并在窗口对象不再存在或窗口关闭时停止。我添加了一些控制台垃圾邮件以使其更清晰。

重要说明 计数不会在页面刷新后继续存在。这是一个只能由服务器端安全处理的问题。

有一个带有链接的列表,它是计数。 每次单击时,尝试在列表中查找链接,增加计数。 如果在列表中找不到链接,只需将其添加到计数为 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>