这是我的网站:http://www.brute.adult。以下是codepen:https://codepen.io/vaninoo/pen/GMbbEg。
正如您在网站上看到的,当您点击链接时,会出现许多弹出窗口。我一直试图让它们在卸载时消失。以下是弹出窗口的调用方式:
$( "#title1" ).click(function() {
popup1 = window.open("protein.html", "_blank","menubar=no,location=no,resizable=no,scrollbars=no,status=yes,top=0,left=500,width=500,height=500");
setTimeout(function(){
var popup2 = window.open("protein2.html", "_blank", "toolbar=no,scrollbars=yes,resizable=yes,top=300,left=100,width=500,height=600");
}, 500);
setTimeout(function(){
var popup3 = window.open("protein3.html", "_blank","toolbar=no,scrollbars=yes,resizable=yes,top=10,left=2000,width=400,height=700");
}, 1000);
setTimeout(function(){
var popup4 = window.open("protein4.html", "_blank", "toolbar=no,scrollbars=yes,resizable=yes,top=50,left=50,width=400,height=400");
}, 1500);
});
正如你所看到的,其中一些人被推迟在窗户开启时创造一个节奏。他们的var名称是popup1,popup2,popup3,popup4等。
现在这里是我尝试过的解决方案,但没有成功:
1)逐个关闭它们,但由于某种原因我无法弄清楚,这只适用于popup1:
$(window).on('beforeunload', function() {
if(popup1) {
popup1.close();
}
else {}
});
$(window).on('beforeunload', function() {
if(popup2) {
popup2.close();
}
else {}
});
2)尝试迭代它们。通过添加警报,我将逐一获得popup1,popup2等的名称,因此“while”的第一部分可以工作。但“如果”不会:
$(window).on('beforeunload', function() {
var popup = "popup";
var i = 0;
while (i < 3) {
namesofpopups = popup + i;
i++;
if(namesofpopups) {
namesofpopups.close();
}
}
});
我已经使用了很长时间,我让它在codepen上更容易理解。如果有人能提供帮助,我们将非常感激!
谢谢你,很抱歉这篇长篇文章!
答案 0 :(得分:2)
由于弹出参考变量的范围。您已经在点击处理程序中定义了所有内容(popup1
除外),因此无法从onbeforeunload
事件处理程序访问它们。
要解决这个问题,最好将引用推送到一个数组中,在卸载选项卡时可以循环显示,如下所示:
var popups = [];
$("#title1").click(function() {
popups.push(window.open("protein.html", "_blank", "menubar=no,location=no,resizable=no,scrollbars=no,status=yes,top=0,left=500,width=500,height=500"));
setTimeout(function() {
popups.push(window.open("protein2.html", "_blank", "toolbar=no,scrollbars=yes,resizable=yes,top=300,left=100,width=500,height=600"));
}, 500);
// other popups...
});
$(window).on('beforeunload', function() {
popups.forEach(function(popup) {
popup.close();
});
});
有了这个说法,用弹出窗口轰炸你的用户是令人难以置信的烦人。事实上,如果你这样做,我故意不使用你的网站。如果确实需要这种行为,我建议您在页面中使用模式弹出窗口。