我正在使用Windows 8.1上的VS 2013中的Web应用程序,该应用程序在2012 R2服务器上的IIS 8.5上托管,并使用IE11浏览器。我尝试使用unload事件向Web服务发送信息,以指示用户不再使用已卸载的表单,以便其他人可以使用它(某种许可方案)。该Web服务是第三方,我无法更改该代码。下面的代码是一个片段,显示了如何为unload和beforeunload事件设置JavaScript。
卸载事件的工作原理不起作用,如下所示:
在VS中,在调试应用程序时同时卸载和 beforeunload事件正在运行。 beforeunload提供了一个 消息框询问用户是否要退出,并卸载 event成功调用Web服务。
当IE11使用F12开发人员工具访问IIS上的应用程序时 打开,我得到相同的结果。 beforeunload提供了一个消息框 询问用户是否要退出,以及卸载事件 成功调用Web服务。
当IE11在没有F12开发人员工具的情况下访问IIS上的应用程序时 open,beforeunload工作正常,但unload事件没有 调用Web服务(或者在调用之前浏览器关闭 网络服务传输。
如果我将web服务调用移至beforeunload事件,请发表评论 退出事件,并且不提供beforeunload事件 返回语句(因此阻止消息弹出), beforeunload事件不会调用Web服务(或浏览器) 在调用Web服务之前关闭?)
我经历了很多谷歌试图追踪这一点,但是所提出的解决方案似乎都没有用,或者需要修改第三方代码。
有一项建议说它可能与影响IE11的Windows组策略有关,但我无法追踪到这一点。
我怀疑我在这里犯了一个简单的错误。任何帮助将不胜感激......
< script type = "text/javascript" >
$(window).on('mouseover', (function() {
window.onbeforeunload = null;
}));
$(window).on('mouseout', (function() {
window.onbeforeunload = ConfirmLeave;
}));
var prevKey = "";
$(document).keydown(function(e) {
if (e.key == "F5") {
window.onbeforeunload = ConfirmLeave;
} else if (e.key.toUpperCase() == "W" && prevKey == "CONTROL") {
window.onbeforeunload = ConfirmLeave;
} else if (e.key.toUpperCase() == "R" && prevKey == "CONTROL") {
window.onbeforeunload = ConfirmLeave;
} else if (e.key.toUpperCase() == "F4" && (prevKey == "ALT" || prevKey == "CONTROL")) {
window.onbeforeunload = ConfirmLeave;
}
prevKey = e.key.toUpperCase();
});
function ConfirmLeave() {
return "Are you sure you want to exit EBS Quote to Sale?";
}
$(window).on('unload', (function() {
RemoveActiveUser();
}));
function RemoveActiveUser() {
var cUsertoken = readCookie('userToken');
var wsUrls = webServiceurl + "?op=";
wsUrl = wsUrls + "RemoveActiveUser";
var soapRequest = '<?xml version="1.0" encoding="utf-8"?> \
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" \
xmlns:xsd="http://www.w3.org/2001/XMLSchema" \
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> \
<soap:Body> \
<RemoveActiveUser xmlns="http://portal.ebs-next.com/EbsQuoteToSale/"> \
<usrToken>' + $.trim(cUsertoken) + '</usrToken> \
</RemoveActiveUser> \
</soap:Body> \
</soap:Envelope>';
$.ajax({
type: "POST",
url: wsUrl,
contentType: "text/xml",
crossDomain: true,
data: soapRequest,
success: function(data, status, req) {
if (status === "success") {
$('.error').html('');
$('.error').html('');
var jresult = $(req.responseText).find("RemoveActiveUserResult").text();
var obj = jQuery.parseJSON(jresult);
if (obj === '' || obj.length === 0) {
$('.error').html('');
$('.error').css('color', '#F00');
$('.error').html('');
} else {}
}
}
});
eraseCookie('userID');
eraseCookie('userName');
eraseCookie('userRoleID');
eraseCookie('userToken');
eraseCookie('userQouteRights');
eraseCookie('userSaleRights');
}.< /script>
&#13;
答案 0 :(得分:0)
您可以使用e.keyCode,e.ctrlKey&amp; e.altKey。
$(document).keydown(function(e) {
if (e.keyCode == 116) {
window.onbeforeunload = ConfirmLeave;
} else if (e.keyCode == 87 && e.ctrlKey) {
window.onbeforeunload = ConfirmLeave;
} else if (e.keyCode == 82 && e.ctrlKey) {
window.onbeforeunload = ConfirmLeave;
} else if (e.keyCode == 115 && (altKey || ctrlKey)) {
window.onbeforeunload = ConfirmLeave;
}
});