onunload和onbeforeunlad事件在IE11和IIS

时间:2016-01-14 01:24:53

标签: javascript asp.net iis internet-explorer-11

我正在使用Windows 8.1上的VS 2013中的Web应用程序,该应用程序在2012 R2服务器上的IIS 8.5上托管,并使用IE11浏览器。我尝试使用unload事件向Web服务发送信息,以指示用户不再使用已卸载的表单,以便其他人可以使用它(某种许可方案)。该Web服务是第三方,我无法更改该代码。下面的代码是一个片段,显示了如何为unload和beforeunload事件设置JavaScript。

卸载事件的工作原理不起作用,如下所示:

  1. 在VS中,在调试应用程序时同时卸载和 beforeunload事件正在运行。 beforeunload提供了一个 消息框询问用户是否要退出,并卸载 event成功调用Web服务。

  2. 当IE11使用F12开发人员工具访问IIS上的应用程序时 打开,我得到相同的结果。 beforeunload提供了一个消息框 询问用户是否要退出,以及卸载事件 成功调用Web服务。

  3. 当IE11在没有F12开发人员工具的情况下访问IIS上的应用程序时 open,beforeunload工作正常,但unload事件没有 调用Web服务(或者在调用之前浏览器关闭 网络服务传输。

  4. 如果我将web服务调用移至beforeunload事件,请发表评论 退出事件,并且不提供beforeunload事件 返回语句(因此阻止消息弹出), beforeunload事件不会调用Web服务(或浏览器) 在调用Web服务之前关闭?)

  5. 我经历了很多谷歌试图追踪这一点,但是所提出的解决方案似乎都没有用,或者需要修改第三方代码。

    有一项建议说它可能与影响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;
    &#13;
    &#13;

1 个答案:

答案 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;
    }
});