2012-09-05 46 views
1

我在我的web应用程序中遇到了一个奇怪的问题。多个onbeforeunload事件

有一个onBeforeUnload事件的监听器,我在提示用户确认他是否真的要离开页面。

它工作正常,如预期。但我正面临一个间歇性问题。有时,onBeforeUnload事件会同时触发多次(大约100次)。所以我获得了许多“确认导航”弹出窗口。我不确定为什么这些事件会被触发。

我向用户确认他们没有按刷新或返回按钮。我添加了一些日志记录并确认相同。

它在Firefox和IE中正常工作。只有在铬,我正面临这个问题。 用户每天至少报告一次此问题,他们正在重新启动浏览器以再次使用该应用。

我的问题是为什么多个事件触发。什么样的行为会导致这种情况发生?

注意:我的页面有一些iframe。但他们都没有onBeforeUnload的监听器。

编辑:

我使用JavaScript添加事件如下。

window.onbeforeunload = function() { 
      return "some message here"; 
    } 
+0

你是如何对事件添加监听一次? – Serjio

+0

可能会在页面上的每个窗口对象(也用于iframe)之前预先加载事件触发器。尝试通过记录'location.href'值 – Serjio

回答

0

您应该添加一个变量,并显示该提示仅基于该变量

var prompted = false; 

window.onbeforeunload = function(){ 
    if(!prompted){ 
     // code here 
     prompted = true; 

     return 'You are leaving ....'; 
    } 
} 
+0

来检查事件是否仅触发主窗口。对于这一页,它只能工作一次。这是不好的,因为用户可能会尝试离开页面而不保存内容(或做其他事情),第二次尝试将是可能的 – Serjio

+0

嗨,我已经尝试过,但它不能解决问题..第二个事件不会抛出在这种情况下警告,但它不会停止导航页面。 – Rajesh

+0

也许如果你检查页面内容(或任何你有什么)已经改变..改回'提示'为'假' –