2010-10-06 49 views
3

UPDATE
window.onunload只觸發,而不是整個瀏覽器

所以同時讀取你的答案我知道後也確定沒有可靠的方法時,關閉瀏覽器窗口。最初我打算在頁面關閉時使用它來解鎖數據庫中的記錄。基本上,當用戶加載頁面時,訪問鎖的記錄會在頁面關閉時解鎖。有關如何以不同方式做到這一點的更好建議?我正考慮在頁面上發佈通知,他們必須使用關閉按鈕關閉表單而不是X,如果他們使用X關閉,記錄會保持鎖定狀態,例如5分鐘,直到他們可以訪問它再次。


此代碼非常簡單,因爲我只是在測試它。基本上,當我在IE和Chrome中運行此頁面時,警報觸發得很好。當我在Firefox中運行它時,只有一個選項卡,並關閉整個瀏覽器,警報不會觸發。但是,如果我有多個選項卡並將該頁面作爲新選項卡打開,然後使用選項卡上的X關閉它,則會觸發警報。有誰知道Firefox在那裏做什麼?

任何幫助表示讚賞,因爲必須打開多個選項卡才能啓動onunload到火是相當不受歡迎的。

<html> 
<head runat="server"> 
    <title></title> 
    <script type="text/javascript"> 

     window.onunload = function() { 
      alert("unload event detected!"); 
     } 

    </script> 
</head> 
<body> 
</body> 
</html> 

回答

2

你不能指望onunload處理程序開火(它不只是Firefox)。 onbeforeunload處理程序是略微更可靠,但只是略有。

更新回覆您的後續問題:如果你使用鎖,那麼是的,我肯定會使用服務器端超時(你沒有其他選擇;如果用戶的工作站藍領例如,你想在某個時候解鎖該記錄)。您可能希望在您看到用戶活動時重置超時(您可以在頁面打開時使用ajax ping),並且正如您所說的那樣,爲用戶提供一種明確釋放記錄的方法。超時時間應該由您決定,但如果您使用ajax ping機制,則無需任何理由甚至需要五分鐘  —您可以執行一分鐘的超時和30秒的ajax ping,或者甚至一個30秒的超時和一個15秒的ping,無論如何。取決於你想放在服務器上的負載類型。

+0

感謝您的幫助,請查看我對該帖子的更新。 – ryanulit 2010-10-07 12:48:21

0

點擊X關閉瀏覽器後,Firefox立即關閉。出於某種原因,它'忘記'調用onunload事件。

+4

'忘記'調用它,或故意不調用它?舉個例子,我不喜歡一個頁面干擾我故意終止窗口或整個程序,所以它可能是開發者有意識地決定不發佈該事件。 – 2010-10-06 21:32:30

+0

什麼@斯蒂芬說。這在過去曾被不良網站濫用(曾幾何時,在實驗室計算機上將IE的「主頁」設置爲whitehouse.com是令新用戶感到尷尬的好方法......) – Shog9 2010-10-06 22:39:45

+0

感謝您的幫助,請檢查我的更新到帖子。 – ryanulit 2010-10-07 12:49:18

相關問題