Firefox onbeforeunload处理程序和窗口焦点

时间:2016-09-01 10:22:59

标签: javascript firefox onbeforeunload

解决 Is it possible to display a custom message in the beforeunload popup?

原始问题

我正在使用Firefox ESR 45.3.0,并且我已经编写了一个小测试页:

<html>
    <body>
        <script type="text/javascript">
            window.onbeforeunload = function() {return "foo"};
        </script>
        <p>content</p>
    </body>
</html>

错误行为:

  1. 加载任何页面
  2. 加载此测试页(也可以通过&#34; file:///..."再现;)
  3. 点击浏览器
  4. 确认对话框未显示
  5. 正确行为:

    1. 加载任何页面
    2. 加载此测试页
    3. 在窗口内点击
    4. 点击浏览器
    5. 显示确认对话框
    6. 我还玩过控制台(开发者工具),尝试将焦点设置在窗口或正文上,如果不点击页面仍然无法正常工作。 我的原始问题页面更长,而不是7.你也可以通过鼠标滚轮滚动页面,这也是#34;激活&#34; onbeforeunload处理程序。

      奇怪,看起来像是一个Firefox的bug,你有没有提示如何处理这个问题?

      此致 贡纳尔

      更新1

      使用e.returnValue无法解决问题,我已在上面显示的测试页面中对其进行了测试。

      测试页面非常简单,原始问题页面中的原始javascript代码是从其他一些问题/答案中复制而来的,如

      function checkModelChanged(modelChanged, confirmText)
      {
          if (modelChanged === true)
          {
              var myEvent = window.attachEvent || window.addEventListener;
              var chkevent = window.attachEvent ? 'onbeforeunload' : 'beforeunload'; /// make IE7, IE8 compitable
      
              myEvent(chkevent, function(e) { // For >=IE7, Chrome, Firefox
                  (e || window.event).returnValue = confirmText;
                  return confirmText;
              });        
          }
      }
      

      更新2

      1. 测试页在Chrome 52.0.2743.116 m和Edge 38.14393.0.0(EdgeHTML 14.14393)中按预期工作。浏览器返回没有&#34;窗口交互&#34;显示确认对话框。

      2. 原始问题页面是Liferay Portlet(JSF 2.2和Primefaces 5.3)的一部分,我已经尝试过javascript的scollIntoView和jQuery的动画(scrollTop)或触发器(点击)。

0 个答案:

没有答案