jQuery:如何检测弹出窗口是否关闭?

时间:2014-07-28 12:00:39

标签: javascript jquery javascript-events window

我想检测用户是否在我的应用程序的弹出窗口中按下了浏览器的关闭按钮。

通过搜索我找到了这个解决方案:

      $(window).bind('beforeunload', function(event) {
      $.ajax({url:"acquisition_cleanup.php", async:false});
      var dataStr = 'id={id}';
      $.ajax({
          type: "POST",
          url: "acquisition_cleanup.php",
          data: dataStr,
          success: function() {
            window.close();
          }
      });
  });

在我使用Firefox 31的Ubuntu机器上运行良好。但不幸的是,它在使用相同Firefox浏览器的Windows机器上无效。我该如何解决这个问题?谢谢你的帮助!

//编辑

这是我用来打开窗口的功能:

function popup (url) {
win = window.open(url, "Fenster",    "width=1200,height=600,resizable=yes,menubar=no,toolbar=no,status=no,location=no,directories    =no");
win.focus();
return false;
}

编辑2 //

我将此添加到global.js

function checkWindowClosed(url, progress) {
var yourwindowname; // add in Global

if(yourwindowname==undefined){
    var param= "toolbar=no,scrollbars=1";
    yourwindowname=window.open(url, "Fenster", param);
}else{
    yourwindowname.focus();
}

var timer = setInterval(function() {
    if(yourwindowname.closed) {
        clearInterval(timer);
        progress();
        alert("Popup Closed");
    }else{
        yourwindowname.close();
    }
}, 1000);
}

在HTML-File中我使用了这样的函数,但它仍然不起作用:

        checkWindowClosed("aquisition.php", function() {
        $.ajax({url:"acquisition_cleanup.php", async:true});
        var dataStr = 'id={id}';
        $.ajax({
            type: "POST",
            url: "acquisition_cleanup.php",
            data: dataStr,
            success: function () {
                window.close();
            }
        });
    });

1 个答案:

答案 0 :(得分:1)

您可以试试吗,您可以使用以下代码检查浏览器弹出窗口关闭状态。

var yourwindowname; // add in Global    

/*Added this for to open a browser popup window */ 
if(yourwindowname==undefined){
    var param= "toolbar=no,scrollbars=1";
    yourwindowname=window.open("your url here", 'yourwindowname', param);
}else{
    yourwindowname.focus();     
}

/* Added this to Check the popup closed status - In your case on ajax success event  */
var timer = setInterval(function() {   
    if(yourwindowname.closed) {                             
        clearInterval(timer);  
        //do your process here
        alert("Popup Closed");
    }else{
       yourwindowname.close();
    }  
}, 1000); 

更新了您的工作项目的代码:使用以下代码代替您当前的javascript函数。

function popup (url) {          
    if(win==undefined){
        win = window.open(url, "Fenster",    "width=1200,height=600,resizable=yes,menubar=no,toolbar=no,status=no,location=no,directories=no"); 
    }else{
        win.focus();
    }       
    return false;
}

function checkWindowClosed(){
    var timer = setInterval(function() {
        if(win.closed) {
            clearInterval(timer);
            progress();
            alert("Popup Closed");
        }else{
            win.close();
        }
    }, 1000);
}

  $.ajax({
        type: "POST",
        url: "acquisition_cleanup.php",
        data: dataStr,
        success: function () {
            checkWindowClosed();
        }
    });