我有一個聊天應用程序,我希望每當用戶意外或手動關閉瀏覽器時,他都應該得到一個警報,以便進行各種清理操作。我有更多的事情要在事件之前使用,但我希望將其用於特定的網頁,因爲所有其他網頁也在加載前被調用。請幫助瀏覽器窗口意外關閉時的警報
回答
我們應該防止或提示用戶在執行這些操作時會丟失數據。
- 點擊後面的瀏覽按鈕。
- 點擊刷新瀏覽器按鈕。
- 點擊瀏覽器的關閉按鈕。
- 點擊轉發瀏覽器按鈕。
- 鍵盤卒中Alt鍵 + F4(關閉)
- 鍵盤卒中F5(刷新)
- 鍵盤卒中CTRL + F5 (刷新)
- 鍵盤卒中Shift + F5(刷新)
- 更改網址
- 或者任何導致回發的東西,除了您的特定提交按鈕。
爲了解釋我已經使用了兩個文本框,一個Asp.net提交帶有TestButton ID的按鈕。 我採取的其他回發控件是 另一個asp.net按鈕,一個autopostback屬性爲true的複選框,一個具有autopostback屬性的dropdownlist屬性爲true。 現在我已經使用了所有這些回發控件,以向您展示我們還需要向用戶展示Promt給用戶關於在用戶對這些控件執行操作時丟失的數據。 關於提交按鈕,我們不會顯示提示,因爲我們必須使用該控件操作來提交數據。以下是示例代碼。我已經設置了window.onbeforeunload方法來更改控件。
<html >
<head id="Head1">
<title></title>
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
$(function()
{
// Prevent accidental navigation away
$(':input').bind(
'change', function() { setConfirmUnload(true); });
$('.noprompt-required').click(
function() { setConfirmUnload(false); });
function setConfirmUnload(on)
{
window.onbeforeunload = on ? unloadMessage : null;
}
function unloadMessage()
{
return ('You have entered new data on this page. ' +
'If you navigate away from this page without ' +
'first saving your data, the changes will be lost.');
}
window.onerror = UnspecifiedErrorHandler;
function UnspecifiedErrorHandler()
{
return true;
}
});
</script>
</head>
<body>
<form id="form1" name="myForm" runat="server">
<div>
First Name :<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br />
<br />
Last Name :<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox><br />
<br />
IsMarried :<asp:CheckBox ID="CheckBox1" runat="server" /><br />
<br />
<asp:Button runat="server" ID="TestButton" Text="Submit" CssClass="noprompt-required" /><br />
<br />
<br />
<br />
<br />
<asp:Button runat="server" ID="AnotherPostbackButton" Text="AnotherPostbackButton"
/><br />
<br />
<asp:CheckBox runat="server" ID="CheckboxWhichCausePostback" Text="CheckboxWhichCausePostback"
AutoPostBack="true" /><br />
<br />
DropdownWhichCausePostback<asp:DropDownList runat="server" ID="DropdownWhichCausePostback"
AutoPostBack="true">
<asp:ListItem Text="Text1"></asp:ListItem>
<asp:ListItem Text="Text2"></asp:ListItem>
</asp:DropDownList>
<br />
<br />
</div>
</form>
</body>
上面我已經使用:
$('.noprompt-required').click(function() { setConfirmUnload(false); });
我在這行做的是我打電話setConfirmUnload
方法,並把false作爲參數,該參數將設置window.onbeforeunload
爲null。 那麼這意味着什麼在任何控制你想要該用戶不應該被提示,給這個控制類.noprompt-required
並保持原樣。
你可以嘗試卸載事件:
$(window).unload(function() { alert("Bye now!"); });
http://docs.jquery.com/Events/unload
我猜這清理是隻在客戶端上。瞭解這些「清理」的性質很有意思。
試試這個 「有趣的是知道的性質」 確實如此。他們最好不要成爲主人需要的東西,因爲不管你可以強制卸載什麼樣的清理,如果瀏覽器從任務管理器中死亡或用戶的PC崩潰,你將無法捕捉它... – jlarson 2009-08-07 13:06:32
我也是這意味着服務器上可能還需要進行一些清理。在任務管理器發生瀏覽器中斷時可能會處理的東西。 – 2009-08-07 13:39:55
這會提醒用戶,但他們無法返回頁面。我認爲他的問題中的「意外」一詞意味着SO使用的一種警報。 – 2009-08-07 18:13:02
這是不是一個真正的JQuery的東西,我用這個功能:
function setConfirmUnload(on) {
window.onbeforeunload = (on) ? unloadMessage : null;
}
function unloadMessage() {
return "Are you sure you want to leave this page";
}
然後,在任何時候都可以調用
setConfirmUnload(真),以使確認或假,如果你想允許他們在沒有警告的情況下關閉屏幕(例如,如果您有關閉按鈕)。
您可以使用Ajax
$(window).unload(function() { alert("AJAX function to do required job"); });
- 1. 關閉瀏覽器警報
- 2. 卸載時關閉瀏覽器窗口
- 3. 窗口關閉時的JavaScript警報
- 4. 關閉瀏覽器的主窗口
- 5. 關閉Vaadin的瀏覽器窗口
- 6. 關於打開/彈出新窗口的瀏覽器警報
- 7. 如何使用angularjs自定義瀏覽器關閉窗口的警報
- 8. Cmd窗口意外關閉
- 9. 當瀏覽器窗口關閉
- 10. driver.quit()不關閉瀏覽器窗口
- 11. 關閉瀏覽器窗口javascript for blackberry
- 12. 自動關閉瀏覽器窗口
- 13. geb spock並關閉瀏覽器窗口
- 14. Silverlight - 關閉瀏覽器窗口
- 15. 檢查瀏覽器窗口關閉
- 16. 如何關閉瀏覽器窗口?
- 17. Dart:如何關閉瀏覽器窗口?
- 18. 關閉所有瀏覽器窗口?
- 19. 如何關閉瀏覽器窗口
- 20. 跨瀏覽器窗口關閉事件
- 21. Selenium關閉瀏覽器彈出窗口
- 22. 使用asp.net關閉瀏覽器窗口
- 23. Flash AS3關閉瀏覽器窗口
- 24. 關閉彈出窗口關閉直到瀏覽器關閉
- 25. 試圖關閉警報後的窗口
- 26. 如何關閉瀏覽器的父窗口也關閉子彈出窗口?
- 27. 警報關閉,但獲取意外的警報打開錯誤
- 28. 在瀏覽器窗口關閉前顯示jQuery彈出窗口
- 29. 從其他窗口關閉所有子窗口瀏覽器
- 30. 一旦另一個窗口關閉,更改瀏覽器窗口
我投這個票,但是......它在iOS(iPad/iPhone)中不起作用,這是一個無賴。 – Michael 2013-04-18 02:30:29
真的好主意和解決方案! – Aleeeeee 2013-07-11 15:06:31
即使實際提交表單,此解決方案也會觸發。它是無法使用的。 – 2016-02-01 16:13:22