jQuery中的多个beforeunload处理程序

时间:2013-04-11 14:53:23

标签: javascript jquery cross-browser onbeforeunload

我正在为一个将在客户网站上使用的插件编写JavaScript,并且需要使用beforeunload处理程序将一些信息存储到用户的cookie或localstorage中以进行跟踪。

但是,由于我不控制客户端的站点,我担心客户端页面在我们设置之前已经定义了一个beforeunload处理程序。特别是,我担心客户端的JavaScript会创建一个'beforeunload'处理程序,返回一个字符串来创建一个'Are you sure you want to leave this page?'样式的弹出窗口,并且在此之后添加我们的处理程序可能会破坏或干扰有了这个功能。

基于Chromium控制台中的一些实验, 似乎如果我使用jQuery(window).on('beforeunload', handler)添加处理程序,那么所有处理程序都会按照它们添加的顺序执行然后存在任何确认对话框的内容仅由最终的非undefined返回值 决定。因此,如果添加了显式返回的最后一个处理程序返回null,则不会显示任何消息,如果它返回一个字符串,则会显示一个包含该字符串作为其内容的确认对话框。这是我想要的行为;这意味着只要我从 I 添加的undefined处理程序返回beforeunload,我就不应该破坏任何客户的代码。

但是,我可以在所有浏览器中依赖此行为吗?如果客户端通过jQuery以外的机制添加原始beforeunload处理程序,如明确分配给window.onbeforeunload或使用window.addEventListener 如何处理jQuery如何处理?在幕后分配多个处理程序?

1 个答案:

答案 0 :(得分:0)

如果你这样做会怎么样

 var x = window.onbeforeunload
 window.onbeforeunload = function() { 
       // do your stuf
       if (x) return x();
 }

所以这样你就可以返回初始事件处理程序假设要返回的内容。