Javascript 为什么在用户关闭chrome中的选项卡时显示弹出窗口?

Javascript 为什么在用户关闭chrome中的选项卡时显示弹出窗口?,javascript,angularjs,Javascript,Angularjs,您能告诉我为什么当用户关闭chrome中的标签时,弹出屏幕或警报不显示吗? 这是我的密码 通过此链接在选项卡上运行代码 我认为onbeforeunload规范最近悄无声息地发生了变化。让我们把angular放在一边,检查一下应该有效的基本示例 window.onbeforeunload = function(e) { alert('test'); console.log('test') e.returnValue = 'test'; return 'test'; }; 这段

您能告诉我为什么当用户关闭chrome中的标签时,弹出屏幕或警报不显示吗? 这是我的密码

通过此链接在选项卡上运行代码


我认为onbeforeunload规范最近悄无声息地发生了变化。让我们把angular放在一边,检查一下应该有效的基本示例

window.onbeforeunload = function(e) {
  alert('test');
  console.log('test')
  e.returnValue = 'test';
  return 'test';
};
这段简单的代码处理onbeforeunload事件。 例如,它在最新的chrome中的表现

  • 它显示浏览器默认的离开网站的消息,带有带有“离开”和“取消”按钮的确认框
  • 执行console.log
  • 阻止javascript执行的警报、提示和其他内容将自动被阻止
  • 我也观察到,如果我们打开一个带有上面代码的页面,并且不会与页面关闭标签进行任何交互,那么在没有任何消息的情况下是可能的,当我们点击任何空白点时,情况就会发生变化,在这种情况下,默认的确认框将会出现,控制台日志将显示。
甚至可以在此处发送ajax请求,例如:

 window.onbeforeunload = function(e) {
  alert('test');
  console.log('test');
  var xhr = new XMLHttpRequest();
  xhr.open('GET', 'send-ajax-data.php');
  xhr.send(null);

  e.returnValue = 'test';
  return 'test';
};
显示默认浏览器提示,并在后台发送ajax请求。因此,如果在用户确认离开站点之前完成一些异步操作,则可以执行这些操作

总之,我认为你想要实现的目标是不可能的。由于存在默认的浏览器提示,因此无法将其替换为自定义模式。Alers也无法执行

 window.onbeforeunload = function(e) {
  alert('test');
  console.log('test');
  var xhr = new XMLHttpRequest();
  xhr.open('GET', 'send-ajax-data.php');
  xhr.send(null);

  e.returnValue = 'test';
  return 'test';
};