如何在Chrome中执行window.onbeforeunload = function(e){..}中的内容?

时间:2012-03-29 22:57:10

标签: javascript google-chrome

正如window.onbeforeunload not working in chrome LapinLove404 所述,似乎在beforeunload函数内的Chrome中,除了更改确认消息之外,其他任何操作都无法完成。

以下代码适用于FF和IE,但不适用于Chrome:

<html>
<head>
<script type="text/javascript">
 window.onbeforeunload = function sair() {
  alert("This alert doesn't show up in Chrome");
  return "If you leave this page your data will be lost!";
 }
</script>
</head>
<body>
 <a href="http://www.example.com"> Leave the page </a>
</body>
</html>

在用户离开页面之前,我该怎么做?例如,如果我需要使用异步调用保存页面状态或取消设置先前设置的锁定。我认为它有很多用例,但不幸的是Chrome并没有让它成为一项微不足道的任务。任何解决方法的想法?

2 个答案:

答案 0 :(得分:2)

onbeforeunload的功能非常有限。我认为你能做的最多就是回复一条消息。你不能阻止某人离开你的页面。您无法在onbeforeunload中执行任何代码。您可以尝试onunload

答案 1 :(得分:2)

我相信你可以设置cookie,写入HTML5存储等...但是,出于安全性和拒绝服务的原因,你不能做某些事情,如提示用户,设置window.location等... ,可能会让用户无法访问他们要求访问的网页。

通常,当给定用户在网页上并期望该页面上的所有路径都允许您清除该锁定时,在服务器上保持显式锁定并不是一个好的设计选择。有无锁技术可用于防止大多数更新问题。一种相当简单的方法是让客户端获取数据的初始状态并挂起。当他们想要更新数据时,他们会重新提交原始数据和新数据。当服务器同时接收旧的和新的时,它可以发出临时锁,获取当前数据并查看它是否与客户端提交的旧数据匹配。如果是,那么在用户编辑数据时没有其他人更改过数据。如果旧数据和当前数据不匹配,则在用户编辑时已修改数据。如果它已被修改,那么它取决于应用程序做什么 - 策略可以是从最后一个到写入获胜的所有内容,仅合并仅更改的字段以拒绝写入,因为基础数据已更改并告诉用户他们需要查看数据的新状态并重新应用任何所需的编辑。

还有其他类似技术涉及changeID编号或修订版ID,而不是旧数据的副本。