当用户关闭Chrome中的标签页时,为什么会显示弹出窗口?

时间:2018-11-26 11:48:31

标签: javascript angularjs

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

http://plnkr.co/edit/Whospoc9SLVe6gjbsVWc?p=preview

通过此链接在标签上运行代码 http://run.plnkr.co/Tj9w5LalKQmE9w1w/

$scope.$on('onUnload', function (e) {
            alert('onBeforeUnlccoad')

        console.log('leaving page');
    });

    $scope.$on('onBeforeUnload', function (e) {
        alert('onBeforeUnload')
        console.log('leaving page');
    });

1 个答案:

答案 0 :(得分:0)

我认为onbeforeunload规范在最近一段时间无声无息地发生了变化。让我们将角度放在一边,并检查应该起作用的基本示例。

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也无法执行。