2012-10-25 41 views
-1

我有这个功能的问题。我会解释 - 如果用户关闭浏览器,我必须执行函数。这个函数在JavaScript- saveCookieScriptPrefOnLogOut()中写入。如果用户关闭浏览器,运行函数

我有这样的解决方案(我所著这个计算器,从使用信息):这个解决方案

var inFormOrLink; 
$('a').live('click', function() { inFormOrLink = true; }); 
$('form').bind('submit', function() { inFormOrLink = true; }); 

$(window).bind('beforeunload', function(eventObject) { 
var returnValue = undefined; 
if (! inFormOrLink) { 
    saveCookieScriptPrefOnLogOut(); 
} 
saveCookieScriptPrefOnLogOut(); 
return true; 
}); 

的问题是:有问题的每一个浏览器的显示窗口“你真的要关闭吗?”我不得不隐藏这个信息/窗口。第二个问题(不太重要但仍然) - 当我点击链接或表单提交时,FF和IE运行此功能。我需要忽略链接和表单提交。

解决方案必须是交叉浏览器解决方案(IE,Chrome,FF上的窗口,最重要的是IE)。我可以使用PHP和JavaScript。

你能给我答案我怎么解决这些问题?

+0

为什么你需要依靠关闭浏览器的用户?为什么不能在页面加载完成时写入该cookie?这是在像网页这样的无状态环境中进行开发的错误方法。 – deceze

+0

这里是一个类似的问题:http://stackoverflow.com/questions/6107967/javascript-jquery-crossbrowser-detection-when-user-is-closing-the-browser –

回答

1

试试这个:

var inFormOrLink = false; 

$('a').live('click', function() { inFormOrLink = true; }); 
$('form').live('submit', function() { inFormOrLink = true; }); 

$(window).bind('beforeunload', function() { 
    if(!inFormOrLink) { 
     saveCookieScriptPrefOnLogOut(); 
    } 
}); 

如果从事件处理(无return语句隐返回undefined),将不会出现在对话框返回undefined ..还有,你叫saveCookieScriptPrefOnLogOut不管inFormOrLink