关闭当前选项卡之前,javascript打开弹出窗口

时间:2015-08-11 12:02:24

标签: javascript popup onbeforeunload

我想在用户关闭当前网站的最后一个标签时打开一个弹出窗口。我遇到的问题是

  • 当浏览器提示用户(onbeforeunload返回非空值)时,浏览器会阻止弹出窗口(参见下面的案例1)
  • 当浏览器没有向用户提示任何内容(onbeforeunload没有返回任何内容)时,弹出窗口根本没有打开,似乎被浏览器完全忽略了(为什么会这样?)(见案例) 2下方)

案例1:阻止提示和弹出窗口(代码来自this answer

window.onbeforeunload = function (e) {
    e = e || window.event;

    window.open('http://localhost', '_blank');

    // For IE and Firefox prior to version 4
    if (e) {
        e.returnValue = 'Sure?';
    }

    // For Safari
    return 'Sure?';
};

案例2:没有提示,没有弹出窗口,页面关闭“正常”

window.onbeforeunload = function (e) {
    e = e || window.event;

    window.open('http://localhost', '_blank');
};

2 个答案:

答案 0 :(得分:1)

来自the specification

  

如果满足以下任何条件,则允许算法显示弹出窗口

     

运行算法的任务当前正在处理其点击事件受信任的激活行为。

关闭窗口不是点击事件。

  

运行算法的任务当前正在为可信事件运行事件侦听器,其类型在以下列表中:

unload不在该列表中。

  

运行算法的任务由允许显示弹出窗口的算法排队,此类算法链在用户代理定义的时间范围内启动。

     

例如,如果用户点击了一个按钮,那么弹出窗口可能会在4秒后产生,但是4小时后弹出窗口可能是不可接受的。

再一次,没有。任务没有排队。

无法打开弹出窗口以响应用户尝试离开您的网站。它会启用太多有害行为(点击此广告,退出弹出,您必须点击此广告,循环)。

答案 1 :(得分:-1)

这是我的代码:

   var popWindow = true;
   window.onbeforeunload = function() { 
       if(popWindow == true) {
            popWindow = false;
            return "Sure?"; 
       }
  }

http://jsfiddle.net/anam/su8dznoa/