我正试图调用一个服务来更新浏览器关闭或选项卡关闭时的数据。问题是使用$http及其异步的服务调用,因此根据我的浏览器卸载事件取消该调用并关闭浏览器。我想让浏览器等到我得到服务调用的响应/错误。
我试着给e.preventDefault()e.stopPropagation()打电话,但没用。

function releaseDocument(e) {
    EventService.releaseDocument().then(function() {
        window.close();
    }, function() {
        window.close();
    });
}

$window.onbeforeunload = releaseDocument;
$window.onunload = releaseDocument;

有谁能帮助或建议任何替代方案,以实现同样的目标!是吗?

最佳答案

可能我们可以通过使用同步ajax调用来实现,这也是我的建议。
关闭浏览器/选项卡时,我们将显示一个确认框。同时我们将同步呼叫您的服务。但我们应该在执行确认框行之前调用此服务。因此sync调用将执行每一行并返回结果,然后只有确认才会触发/或关闭选项卡。在这里,我们几乎没有时间执行这个函数。

 window.addEventListener("beforeunload", function (e) {
  var confirmationMessage = "Do you want close this browser";
   releaseDocument()// it should be an sync function ( like you can set async:false in your ajax options

  (e || window.event).returnValue = confirmationMessage; //Gecko + IE
  return confirmationMessage;                            //Webkit, Safari, Chrome
});

10-05 21:09
查看更多