我的书说,当我关闭浏览器,导航到其他页面或刷新页面时,以下代码将显示一个消息框。它不会发生!为什么呢?
<!DOCTYPE HTML PUBLIC="-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<title>Body attributes</title>
<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1">
<head>
</head>
<body onload="window.alert('Greetings!')"
onunload="window.alert('...Goodbye')">
<h1>Loaded</h1>
<a href="https://www.google.com/">Go to google!</a>
</body>
</html>
答案 0 :(得分:1)
如果您在关闭页面时可以在任意长时间内运行任意代码,那么这可能是滥用的机会。如果旧浏览器支持它,我不会感到惊讶,但出于安全原因,新浏览器停止支持它。
如果您想提示某人是否真的要退出网页,可以使用onbeforeunload
,并返回提示信息:
<body onbeforeunload="return 'I\'ll miss you!';">
答案 1 :(得分:1)
浏览器对unload
事件处理程序中可执行的内容施加了限制。 IE 11仍然允许你在那里打开一个新窗口,但Chrome和Firefox不会;他们忽略了您对window.alert
的电话。 Chrome在控制台日志中描述了这一点:“在卸载期间阻止警报(&#39; ...再见&#39;)。”这意味着您在unload
事件处理程序中可以做的事情并不多,即使该事件仍然创建并可以处理。
相反,您可以处理在实际卸载开始之前创建的unbeforeunload
event。此事件首先在IE 4中实现,然后由其他浏览器供应商复制,现在已在HTML5规范5.6.11 Unloading documents中定义。使用它,您仍然无法根据需要创建窗口,但浏览器会向用户显示一个对话框。该对话框由浏览器以特定于浏览器的方式创建。您可以尝试通过使事件处理程序将其作为值返回来将自己的消息注入其中,但Firefox会故意忽略此类请求。
<body onload="window.alert('Greetings!')"
onbeforeunload="return '...Goodbye'">
<h1>Loaded</h1>
<a href="https://www.google.com/">Go to google!</a>
&#13;