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

时间:2017-10-25 10:37:55

标签: javascript jquery popup onunload

这是我的网站: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上更容易理解。如果有人能提供帮助,我们将非常感激!

谢谢你,很抱歉这篇长篇文章!

1 个答案:

答案 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();
  });
});

有了这个说法,用弹出窗口轰炸你的用户是令人难以置信的烦人。事实上,如果你这样做,我故意不使用你的网站。如果确实需要这种行为,我建议您在页面中使用模式弹出窗口