Google Chrome浏览器的第二页上的OnBeforeUnload行为不同

时间:2016-01-06 02:42:19

标签: javascript jquery google-chrome onbeforeunload

我正在使用此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;
  • 点击"上一页"在浏览器工具栏中>选择"离开此页" >控制台日志显示"为什么退出?" ,"导航到......"
  • 点击"刷新"在浏览器工具栏中>选择"不要重新加载" >控制台日志显示"为什么退出?" ,"很高兴你留下了#34;
  • 点击"刷新"在浏览器工具栏中>选择"重新加载此页" >控制台日志显示"为什么退出?" ,"导航到......"
第2页

(点击"下一页"超链接后)

  • 点击"下一页"超链接,控制台日志应显示"导航到..."
  • 点击"上一页"在浏览器工具栏中>选择"留在这个页面" >控制台日志显示"为什么退出?" ,"很高兴你留下了#34;
  • 点击"上一页"在浏览器工具栏中>选择"离开此页" >控制台日志显示"为什么退出?","很高兴你留下了#34; ,"导航到..."
  • 点击"刷新"在浏览器工具栏中>选择"不要重新加载" >控制台日志显示"为什么退出?" ,"很高兴你留下了#34;
  • 点击"刷新"在浏览器工具栏中>选择"重新加载此页" >控制台日志显示"为什么退出?","很高兴你留下了#34; ,"导航到..."

你可能会注意到这个消息"很高兴你留下了#34;出现在第2页的每个选项中。我的问题是:为什么第2页的行为发生了变化?以及如何在Chrome中的两个页面中使行为保持一致?

以上结果在Google Chrome v47中进行了测试。两个页面中的行为在Firefox中都是相同的。

最后,测试页面可用here(无法使用JSFiddle,因为它无法重现onbeforeunload效果)

0 个答案:

没有答案