EventListener beforeunload和JavaScript全局变量

问题描述

我有一个SpringBoot / JSP / JavaScript应用程序,并且仅当更改页面的命令不是来自应用程序内部时,才尝试触发 beforeunload 浏览器弹出消息。来自浏览器(后退,前进,刷新,主页等)

因此,每次点击应用中的按钮时,我都会

  1. actionFromApp JavaScript全局变量设置为 true (该变量在每次刷新页面认设置为 false
  2. 禁用页面中的所有按钮
  3. 提交表格

我100%确信正确设置了全局变量,应用无法禁用按钮并提交表单而不将其设置为true。但是随机的beforeunload事件侦听器似乎无法检测到它:这发生在每个按钮上,有时是在第一次单击页面时立即发生,有时是在单击几次后出现。

这怎么可能?

我的代码

JS文件顶部的变量声明

let actionFromApp = false;

onButtonClick

function buttonClick(formName) {
   setActionFromApp();
   disableAllActiveButtons(formName);
   document.getElementById(formName).submit();
}

SetActionFromApp

function setActionFromApp() {
   actionFromApp = true;
}

EventListener

window.addEventListener("beforeunload",function(event) {
   if (!actionFromApp) {
      event.preventDefault();
      event.returnValue = true;
   }
});

我知道删除 if 子句或将其设置为true时,EventListener都可以正常工作。

干杯。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)