Facebook如何处理他们的onbeforeunload确认对话框?

Cor*_*lou 8 javascript modal-dialog onbeforeunload

在OSX上的最新Chrome浏览器中,我注意到开始输入评论框并点击其他链接或按后退按钮会触发一个确认窗口,询问我是否要离开:

Facebook确认对话

作为一名老学校开发人员,我相信唯一的可能性就是将一个onbeforeunload事件附加到页面来处理后退按钮点击.我知道你可以对锚点进行全局绑定来模拟onbeforeunload,但我很惊讶他们设法有一个自定义样式的确认而不是股票,丑陋的确认对话框.

他们是如何做到的呢?这是某种HTML5窗口历史记录还是pushState事件触发器?

lov*_*ate 2

好的,我在 Stackoverflow 上找到了这个答案

这处理onbeforeunload.
要在浏览器中测试它,只需输入

window.onbeforeunload = function() { return "Your work will be lost."; };
Run Code Online (Sandbox Code Playgroud)

进入控制台,按 Enter 键并尝试后退按钮。

现在给你真正的答案:

Facebook 以上述方式处理后退按钮的按下(正如我测试的那样),并cancel(l)ing通过单击页面上div弹出的问题中的另一个链接来处理评论。

编辑

如果可以阻止浏览器离开上下文AJAX,那么这将起作用(将其添加到控制台中):

window.onpopstate = function (event) {
 alert("location: " + document.location);
 event.preventDefault();
 return false;
}
Run Code Online (Sandbox Code Playgroud)

我在这里回答是因为 Facebook 不这样做,这是你最初的问题。但我真诚地希望有人证明这是错误的!