我有一个 asp.net 应用程序,其中包含一个链接,可以在点击时打开一个窗口。
示例:
< a href =“url”onclick =“window.open(url,name,parameters)”>
这很好用。它会根据需要打开一个窗口。我想要的是打开窗口的应用程序,因为单击链接并在单独的窗口中打开窗口。
第一次点击打开第一个窗口 第二次单击打开同一链接的第二个窗口 第三次单击打开同一链接的第三个窗口。
我想要打开同一个链接的最多5个窗口,每次点击一个窗口。如果可能的话,我将如何实现这一目标?
答案 0 :(得分: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毫秒检查一次,当窗口对象不再存在或窗口关闭时停止。我添加了一些控制台垃圾邮件以使其更清晰。
重要计数将无法在页面刷新后继续存在。这是一个只能安全地处理服务器端的问题。
答案 1 :(得分: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>