2012-10-25 45 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