【问题标题】:Onbeforeunload doesn't work until mouse is clicked once in the body在正文中单击一次鼠标之前,Onbeforeunload 不起作用
【发布时间】:2018-01-30 14:11:41
【问题描述】:

经过漫长的一天尝试找到解决此问题的方法后,我一直遇到同样的问题。

基本上,我有一个网站,如果用户点击“浏览器刷新”按钮,我想弹出一个“你确定”警报框,其中包含“重新加载”和“不要重新加载”选项(基本上,浏览器返回的内容)。

令人惊讶的是,它在 IE 中运行良好。但在 chrome 或 firefox 中,刷新通常不会弹出。

仅当我单击正文的某个位置然后单击“浏览器刷新”按钮时才会出现弹出窗口。

我已经有以下和其他许多类似的替代方案:

window.onbeforeunload = function (e) {
    e = e || window.event;

   // For IE and Firefox prior to version 4
   if (e) {
       e.returnValue = 'Any string';
   }

  // For Safari
  return 'Any string';
};

我尝试使用'trigger('click')'、'.click()' 事件来模拟页面加载时的点击事件。

但是,在我自己(物理上)单击身体之前,它仍然不起作用。

我创建了一支短笔,它复制了我面临的问题。

https://codepen.io/kanchanrai/pen/LQEZYV

我们将不胜感激任何帮助。提前致谢。

【问题讨论】:

  • 为什么你首先需要这样做?如果没有与页面的交互并且没有正当理由需要警告用户,这只会让用户感到烦恼
  • 这只是一个例子,并指出了确切的问题。我看到了几乎所有问题的此类回复。这是我正在处理项目的付款页面所必需的。我无法详细说明,但仅此而已,有一个正当的理由需要警告用户。除了需要点击身体的那一部分,我都完成了。

标签: javascript jquery cross-browser onbeforeunload


【解决方案1】:

也许是一个迟到的答案......

MDN documentation on beforeunload event 声明如下:

注意:为了防止不需要的弹出窗口,浏览器可能不会显示在 beforeunload 事件处理程序中创建的提示,除非页面已经被交互过,或者甚至可能根本不显示它们。

这与您观察到的行为相符。

【讨论】:

  • 是的,同意,在尝试了几种方法之后,以某种方式强制执行实际点击。因此,我们选择了后端的替代解决方案!感谢费利克斯的回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多