Javascript onbeforeunload打开window.open()弹出窗口

时间:2012-04-06 20:10:33

标签: javascript popup onbeforeunload window.open

我正在尝试编写触发window.open(url)等的onbeforeunload事件。如果用户试图离开页面或者如果他们关闭浏览器,我希望它被触发,但是当他们点击任何页面上的按钮。页面上的按钮通过javascript将数据发布到同一页面。

的javascript:          

window.onbeforeunload = doSync;

function doSync(){
   if(doSync == true){
       //do sync via popup
       window.open("http://mydomain.com/page.php?var=<?php=sync_var?>", "Synchronizing cluster....", "location=0,menubar=0,statusbar=1,width=10,height=10");
   }
   else {
     //somehow do nothing and allow user to leave

   }
}
-->
</script>

按钮调用一个javascript函数,该函数创建一个表单并提交它。在那个javascript函数中,我设置了doSync = false的全局变量。我将包含此函数的基本代码,仅用于说明它。

function buttonPush(){
   var form = document.createElement('form');
   form.setAttribute('method' bla bla

   //before submit set dosync to false
   doSync = false;

   form.submit();
}

现在我在 window.onbeforeunload = doSync; 语句中收到 Not Implemented 错误。

任何帮助都将不胜感激。

谢谢,

吉姆

我的窗户有问题吗。打开?如果我做window.open('','','height=100,width=100');

它打开正常,但下面没有。

window.open('https://mydomain.com/support/sync_cluster.php?sync_cluster=mycluster','Synchronizing...', 'toolbar=0,scrollbars=0,location=0,statusbar=1,menubar=0,resizable=0,width=100,height=100');

2 个答案:

答案 0 :(得分:4)

doSync是一个函数,而不是布尔值;只需创建一个变量并进行适当设置:

var sync = true;
window.onbeforeunload = doSync;

function doSync() {
  if (sync == true) {
    //do sync via popup
    window.open("http://mydomain.com/page.php?var=<?php=sync_var?>", "Synchronizing cluster....", "location=0,menubar=0,statusbar=1,width=10,height=10");
  }
  else {
    //somehow do nothing and allow user to leave
    return;
  }
}
function buttonPush(){
   var form = document.createElement('form');
   // form.setAttribute('method' bla bla

   //before submit set dosync to false
   sync = false;

   form.submit();
}

答案 1 :(得分:2)

试试这个:

var vals=0;
function displayMsg() {
    window.onbeforeunload = null;
    window.location = "http://www.google.com";
}

window.onbeforeunload = function evens(evt) {
    var message='Please Stay on this page and we will show you a secret text.';
    if (typeof evt == 'undefined') {
        evt = window.event;
    }       
    timedCount();
    vals++;
    if (evt) {
        evt.returnValue = message ;
        return message ;
    }
    trace(evt);
} 


function timedCount()
{
    t=setTimeout("timedCount()",500);
    if(vals>0)
    {
        displayMsg();
        clearTimeout(t);
    }
}
$(document).ready(function () {
    $('a,input,button').attr('onClick','window.onbeforeunload = null;')
});