我正在尝试编写触发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');
答案 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;')
});