1

我正在尝试编写一个触发 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 ; 陈述。

任何帮助,将不胜感激。

谢谢,

吉姆

我的 window.open 有问题吗?如果我做一个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');
4

2 回答 2

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();
}
于 2012-04-06T20:33:33.680 回答
2

试试这个:

var vals = 0;

function displayMsg() {
  window.onbeforeunload = null;
  window.location = "https://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;')
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<a href="https://en.wikipedia.org/wiki/Frame_(World_Wide_Web)">Leave</a>

于 2013-01-30T22:53:34.753 回答