我有一个聊天应用程序,我希望每当用户意外或手动关闭浏览器时,他都应该得到一个警报,以便进行各种清理操作。我有更多的事情要在事件之前使用,但我希望将其用于特定的网页,因为所有其他网页也在加载前被调用。请帮助浏览器窗口意外关闭时的警报
回答
我们应该防止或提示用户在执行这些操作时会丢失数据。
- 点击后面的浏览按钮。
- 点击刷新浏览器按钮。
- 点击浏览器的关闭按钮。
- 点击转发浏览器按钮。
- 键盘卒中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