我正在为将在客户端站点上使用的插件编写 JavaScript,并且需要使用beforeunload
处理程序将一些信息存储到用户的 cookie 或本地存储中以进行跟踪。
然而,由于我不控制客户的网站,我担心客户的页面在我们设置之前已经定义了一个 beforeunload 处理程序。特别是,我担心客户端的 JavaScript 创建一个“beforeunload”处理程序,该处理程序返回一个字符串以创建一个'Are you sure you want to leave this page?'
-style 弹出窗口,以及在此之后添加我们的处理程序可能会破坏或以其他方式干扰此功能的可能性。
根据 Chromium 控制台中的一些实验,似乎如果我使用 添加处理程序jQuery(window).on('beforeunload', handler)
,那么所有处理程序都会按照添加的顺序执行,然后任何确认对话框的存在和内容仅由最终的undefined
返回值。因此,如果最后一个添加了显式 return 的处理程序null
,则不会显示任何消息,并且如果它返回一个字符串,则会显示一个以该字符串作为其内容的确认对话框。这是我想要的行为;这意味着只要我undefined
从我beforeunload
添加的处理程序返回,我就不应该破坏任何客户的代码。
但是,我可以在所有浏览器中依赖这种行为吗?如果客户端beforeunload
通过 jQuery 以外的机制添加他们的原始处理程序,比如显式分配给window.onbeforeunload
或使用,window.addEventListener
怎么样?jQuery 如何在幕后处理多个处理程序的分配?