1

我有这样一段代码的Javascript:在IE onBeforeUnload()行为和铬

 
window.onbeforeunload = function(){ 
     doSomething(); 
     return "Are you sure you want to leave"; 
} 

在Firefox用户离开页面,DoSomething的()最先被执行,然后报警时弹出。 在IE和Chrome中,首先弹出警报,然后如果用户决定停留doSomething() 得到执行。

有没有办法使IE和Chrome的行为像FF。我想在弹出之前执行doSomething()

+0

在我的工作中,我们这样做:'if(hasChanges &&确认('你想保存吗?')){saveToDb(); };',我知道这不是同一个例子,但尝试使用改变最后一行到'return confirm(“你确定要离开吗?)'。 – Alxandr 2011-05-18 01:06:03

+0

顺便说一句:http://jsfiddle.net/whd9y/在我的电脑上的所有浏览器(IE/FF/GC)上都是一样的。 – Alxandr 2011-05-18 01:08:43

+0

@Alxandr :: http://jsfiddle.net/whd9y/1/在IE和FF中试试这个。在IE中,它不会更改div的html,直到用户选择保留在同一页面上。 – Dhwanit 2011-05-18 01:29:26

回答

0

您使用的是哪个版本的Firefox?据我所知,没有一个浏览器会让你在onBeforeUnload上做任何事情,除了传递文本被包含在弹出的确认对话框中 - 所以你不能阻止用户离开你的网站。

您不应该依赖此事件来确保用户离开您的页面时发生任何事情。如果重要的是将一个点击事件处理程序分配给可以导航离开页面的所有内容(您仍然会失去浏览器导航按钮和地址栏更改)

+0

这个事件在大多数浏览器中都能正常工作。我已经使用它与Ajax进行数据库更改(使用同步模式的课程),它的工作原理与它应该完全一样。如果您希望进行一些HTML更改以吸引用户的注意力,那么它会有不同的行为。 – Dhwanit 2011-05-18 01:32:48

+0

在ajax请求的情况下,只要你得到你的数据库保存时,它不会影响通话时间。 – Dhwanit 2011-05-18 01:33:18

+0

你不能做的唯一事情就是据我所知发送XHRs。关于将点击处理程序添加到所有内容的评论非常天真。用户可以关闭浏览器,点击后退按钮,点击刷新。总的来说在这个答案中没有很好的信息 – 2011-08-18 18:12:36