2017-01-03 81 views
1

我正在尝试调用一个更新浏览器关闭或选项卡关闭数据的服务。问题是服务呼叫使用$http及其异步,所以根据我的浏览器卸载事件取消该调用并关闭浏览器。我希望浏览器等到我得到该服务调用的响应/错误。如何等待浏览器关闭直至服务器调用完成?

我试过打电话e.preventDefault()e.stopPropagation()但它不工作。

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

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

任何人都可以帮助或建议任何替代方案来实现相同!?

+2

如果等到标签关闭它在我的思维方式为时已晚。考虑浏览器崩溃或电源故障......事件不会被触发,或者用户当时没有连接。最好先发送它,以便您有机会发现失败的请求 – charlietfl

+0

这只是不可行的。 –

+0

@charlietfl我同意你的意见。它适用于这种情况。现在只想手动处理浏览器关闭。 –

回答

0

可能是我们可以通过使用同步AJAX调用,也是我的建议。


我们将显示一个确认框,当您关闭浏览器/标签。同时我们会同步致电。但是我们应该在执行确认框行之前调用这个服务。因此,同步呼叫将执行每一行并返回结果,然后只有确认将触发/关闭选项卡。我们在这里没有多少时间来执行这个功能。


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 
}); 
+0

您无法在'beforeunload'内运行阻止代码 – charlietfl

+0

这就是为什么我告诉它这只是我的建议。我没有测试它。 :( –

相关问题