卸载时关闭许多弹出窗口 windows

Closing many pop-up windows on unload

这是我的网站:http://www.brute.adult. And here is the 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);
 });

如您所见,其中一些被延迟以在 windows 开头创建节奏。它们的变量名分别是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" 的第一部分有效。但是 "if" 没有:

$(window).on('beforeunload', function() {
    var popup = "popup";
    var i = 0;

    while (i < 3) {
        namesofpopups = popup + i;
        i++;

        if(namesofpopups) {
            namesofpopups.close();
        }
    }
});

我已经研究这个很久了,我在 codepen 上让它更容易理解。如果有人可以提供帮助,将不胜感激!

谢谢你,抱歉这么久post!

这是由于弹出引用变量的范围。您已经在点击处理程序中定义了它们(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();
  });
});

话虽这么说,用弹出窗口轰炸您的用户是非常烦人的。事实上,如果你对我这样做,我会故意不使用你的网站。如果您确实需要这种行为,我建议您考虑在您的页面使用模态弹出窗口。