我正在使用此answer中的代码段测试onbeforeunload
行为。
var OnBeforeUnload = (function(){
var
FDUM = new Function,
AFFIRM = function(){ return true; };
var _reg = function(msg,opts){
opts = opts || {};
var
pid = null,
pre = typeof opts.prefire == 'function' ? opts.prefire : FDUM,
callback = typeof opts.callback == 'function' ? opts.callback : FDUM,
condition = typeof opts.condition == 'function' ? opts.condition : AFFIRM;
window.onbeforeunload = function(){
return condition() ? (pre(),setTimeout(function(){ pid = setTimeout(callback,20); },1),msg) : void 0;
}
window.onunload = function(){ clearTimeout(pid); };
}
var _unreg = function(){ window.onbeforeunload = null; }
return {
register : _reg,
unregister : _unreg
};
})();
代码几乎相同。如果您查看Developer Console,输出结果如下(确保勾选"保留日志"在Chrome中):
第1页(未点击"下一页"超链接)
(点击"下一页"超链接后)
你可能会注意到这个消息"很高兴你留下了#34;出现在第2页的每个选项中。我的问题是:为什么第2页的行为发生了变化?以及如何在Chrome中的两个页面中使行为保持一致?
以上结果在Google Chrome v47中进行了测试。两个页面中的行为在Firefox中都是相同的。
最后,测试页面可用here(无法使用JSFiddle,因为它无法重现onbeforeunload
效果)