IE 11更改URL

时间:2014-12-01 03:54:14

标签: url internet-explorer-11

我在IE 11中遇到了奇怪的行为。
当我使用URL转到我的Web应用程序时 "主机名:port / myapp-web / app / login.jsp"
显示登录页面,登录成功完成。

现在。问题是,登录后,App的登录页面是index.html。
因此,网址应为"主机名:port / myapp-web / app / index.html"

相反,IE将其更改为"主机名:端口/// index.html"

现在,当我尝试执行任何其他操作或导航时,它会失败,因为基本URL已更改且我的JS代码无法找到应用程序上下文根并且所有AJAX调用都失败。

我尝试在互联网上搜索相同内容,但无法找到答案。

如果有人了解此类行为,请提供帮助。

P.S。应用程序在IE中工作正常:8/9,Chrome和FF。
我找到了与UTF- *字符URL相关的内容,但我的应用程序使用纯文本URL而没有特殊字符。

App是使用Spring开发的服务器端和KnockoutJS开发的,用于UI的HTML。

提前感谢您的帮助。



index.html:

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="X-UA-Compatible" content="IE=9; IE=8; IE=EDGE" />
    <!-- script includes -->
</head>
<body>
    <!-- NavigationBar -->
</body>

<script type="text/javascript">
    app.initialize();      // app.js
  
    $.getJSON('/myapp-web/Security/authorise', function (response) {
        
        app.common.navbar.reRenderNavBar(response);
        app.navigation = new Navigation("AdminHome");    // navigation.js
      
        // This navigation causes IE11 to change URL to http://host:port///#AdminHome
        // it should be // http://host:port/myapp-web/app/index.html#AdminHome
    });
  
</script>
</html>
  
&#13;
&#13;
&#13;

&#13;
&#13;
Navigation.js

var ua = window.navigator.userAgent
var msie = ua.indexOf("MSIE ")
var ieVer = -1;

if (msie > 0) {
    var ieVer = ua.substring(msie + 5, ua.indexOf(".", msie));
    //console.log(ieVer);
}

var NavigationInput = function (pName, pValue) {
    this.paramName = pName;
    this.paramValue = pValue;
    this.toString = function () {
        return pName + ":" + pValue;
    }

}

var Navigation = function (startupView) {
    var self = this;

    this.navInput = [];
    this.navViewModel = null;
    this.navViewModelInitComplete = false;

//    this.navigate = function navigate(view) {
//
//        if (view !== this.currentView) {
//            self.loadView(view, true, null);
//        }
//    }

    this.navigateWithParams = function navigateWithParams(view, params) {
        self.loadView(view, true, params);
    }

    this.goBack = function goBack() {
        history.go(-1);
        //history.back();
    }

    this.loadView = function (view, pushHistory, params) {
        var contentframe = $("#content");
        //app.consolePrintInfo("navigation", "previous view: " + self.currentView + " new view: " + view);
        if (typeof (self.currentView) != 'undefined' && self.currentView
            && self.currentView.toLowerCase() == view.toLowerCase()
            && isParamsEqual(params)) {
            return;
        }


        var constructedView;


        constructedView = "Views/" + view + "/" + view + ".html"

        contentframe.load(constructedView, function () {
            self.currentView = view;

            modUrl = view;

            if (params != null) {
                if (params instanceof String) {
                    modUrl = params;
                }
                else {
                    var queryStr = self.convertParamsToQueryString(params);
                    modUrl += "?" + queryStr;
                }

//                if (typeof(app.navigation.navViewModel) != 'undefined'
//                    && app.navigation.navViewModel
//                    && !app.navigation.navViewModelInitComplete)
//                {
//                    app.navigation.navViewModelInitComplete = app.navigation.navViewModel.initViewModel(self.convertQueryStringToParams(modUrl));
//                }
            }

            if (pushHistory) {
                if (ieVer > 6) {
                    window.history.pushState(view, null, modUrl);
                }
                else {
                    window.history.pushState(view, null, "#" + modUrl);
                }
            }

            app.consolePrintInfo("navigation", "modified url:" + modUrl + " view model: " + app.navigation.navViewModel);
            var navInputs = self.convertQueryStringToParams(modUrl);
            self.urlInputs = navInputs;
            app.navigation.navViewModelInitComplete = app.navigation.navViewModel.initViewModel(navInputs);


            //$.getScript("Views/" + view + ".js", function () {
            //});
        });

        isParamsEqual = function (iParams) {
            if ((typeof(self.urlInputs) == 'undefined' || !self.urlInputs)
                && (typeof(iParams) == 'undefined' || !iParams)) {
                return true;
            }
            else if (app.utility.isObjectNull(self.urlInputs) && app.utility.isObjectNull(iParams)) {
                return true;
            }
            else {
                return false;
            }
        }
    }

    this.convertParamsToQueryString = function (params) {
        var result = "";

        for (var i = 0; i < params.length; i++) {
            if (i > 0) {
                result += "&";
            }
            result += params[i].paramName + "=" +
                params[i].paramValue;

        }

        return result;
    };

    this.convertQueryStringToParams = function (modUrl) {
        var inputs = null;

        var fragments = modUrl.split("?");
        if (fragments && fragments.length == 2) {
            var f = fragments[1].split("&");
            if (f && f.length > 0) {
                for (var i = 0; i < f.length; i++) {
                    var inp = f[i].split("=");
                    if (inputs == null) inputs = [];
                    inputs.push(new NavigationInput(inp[0], inp[1]));
                }
            }
        }

        return inputs;
    };

    this.back = function () {
        if (history.state) {
            var view = self.getView();
            self.loadView(view, false, self.convertQueryStringToParams(location.href));
        } else {
            var view = self.getView();
            self.loadView(view, true, self.convertQueryStringToParams(location.href));
        }
    };

    this.getView = function () {
        var fragments = location.href.split('#');
        if (fragments && fragments.length === 2) {
            var inFrag = fragments[1].split('?');
            if (inFrag && inFrag.length === 2) {
                return inFrag[0];
            }
            else {
                return fragments[1];
            }
        } else {
            return startupView;
        }
    };

    this.loadView(this.getView(), true, this.convertQueryStringToParams(location.href));
    $(window).on('popstate', self.back);
}

         
&#13;
&#13;
&#13;

&#13;
&#13;
app.js:
-----------------
app = {};

// utilities
app.utility = {};
app.ui = {};

// common
app.common = {};

// validation
app.validation = {};

// common components
app.common.navbar = {};
app.common.authorisation = {};


app.initialize = function () {

    $.blockUI.defaults.message = '<h4><img src="images/busy.gif" />&nbsp;Processing...</h4>';
    $.blockUI.defaults.css.border = '2px solid #e3e3e3';
    $(document).ajaxStart($.blockUI).ajaxStop($.unblockUI);

    //$(document).click(function() { $(".popover").remove(); });
}

app.consolePrintInfo = function (tag, message) {
    if (typeof(console) != 'undefined' && console)
        console.info(tag + ": " + message);
}

app.ui.showAppError = function (message) {
    app.consolePrintInfo("App", "displaying error message: " + message);
    $('#error-console').removeClass('app-error-console-hidden');
    $('#error-console').removeClass('alert-info');
    $('#error-console').addClass('alert-error');
    $('#error-console').html(message);
}

app.ui.showAppInfo = function (message) {
    app.consolePrintInfo("App", "displaying info message: " + message);
    $('#error-console').show();
    $('#error-console').removeClass('app-error-console-hidden');
    $('#error-console').removeClass('alert-error');
    $('#error-console').addClass('alert-info');
    $('#error-console').html(message);
    $('#error-console').fadeOut(4000);
}


app.utility.addQueryParameter = function (url, paramName, paramValue) {
    var rUrl = url;
    if (typeof(paramName) != 'undefined' && paramName
        && typeof(paramValue) != 'undefined' && paramValue) {

        if (rUrl.indexOf("?") != -1) {
            rUrl = rUrl + "&" + paramName + "=" + paramValue;
        }
        else {
            rUrl = rUrl + "?" + paramName + "=" + paramValue;
        }
    }
    return rUrl;
}

app.utility.addSearchParameter = function (paramName, paramValue) {
    var rValue = undefined;
    if (typeof(paramName) != 'undefined' && paramName
        && typeof(paramValue) != 'undefined' && paramValue) {
        rValue = paramName + ":" + paramValue;
    }
    return rValue;
}

app.utility.searchParameter = function (inputKeyArray, paramName) {
    if (inputKeyArray instanceof Array) {
        for (var i = 0; i < inputKeyArray.length; i++) {
            if (inputKeyArray[i].paramName == paramName) {
                return inputKeyArray[i].paramValue;
            }
        }
    }
    return undefined;
}

app.utility.isObjectNull = function (obj) {
    return typeof(obj) == 'undefined' || obj == undefined || !obj;
}

app.utility.isObjectNotNull = function (obj) {
    return typeof(obj) != 'undefined' && obj;
}

app.utility.isFunction = function (obj) {
    return !!(obj && obj.constructor && obj.call && obj.apply);
};

app.utility.parseError = function (em) {
    if (!app.utility.isObjectNull(em)) {
        jem = JSON.parse(em);
        var keyArray = new Array();
        keyArray.push(jem.errorCode);
        keyArray.push(jem.errorMessage);
        return keyArray;
    }
    else {
        return undefined;
    }

}

app.utility.showAppErrorDialog = function (errTitle, errMessage) {
    if (!app.utility.isObjectNull(errMessage)) {
        var $message = $("Error:" + errMessage)
            .dialog({autoOpen: false, width: 300, title: errTitle, modal: true, buttons: {
                Ok: function () {
                    $(this).dialog("close");
                }
            }}
        );
        $message.dialog('open');
    }
}

app.utility.showErrorDialog = function (err) {
    if (!app.utility.isObjectNull(err)) {
        var $message = $('<div><p>Unfortunately, there has been error in the server!</p><p>' + err[1] + '</p><p>Please send the screenshot to developer team</div>')
            .dialog({autoOpen: false, width: 300, title: err[0], modal: true, buttons: {
                Ok: function () {
                    $(this).dialog("close");
                }
            }}
        );
        $message.dialog('open');
    }
}

app.utility.showDialog = function (heading, text) {
    if (!app.utility.isObjectNull(heading) && !app.utility.isObjectNull(text)) {
        var $message = $('<div><p>' + text + '</p></div>')
            .dialog({autoOpen: false, width: 300, title: heading, modal: true, buttons: {
                Ok: function () {
                    $(this).dialog("close");
                }
            }}
        );
        $message.dialog('open');
    }
}

app.utility.populateToolTip = function () {
    $("img[id^='tooltip']").each(function () {
        var idName = $(this).attr("id");
        $('#' + idName).tooltip('toggle');
        $('#' + idName).tooltip('hide');

    });
};

app.utility.isNotEmptyNumberValue = function (input) {

    if (app.utility.isObjectNull(input)) {
        return true;
    }
    if (!isNaN(input) && isFinite(input) && ("" + input).indexOf("-") == -1 && ("" + input).indexOf("e") == -1) {
        return true;
    }

    return false;
};

app.utility.isNotEmptyWholeNumberValue = function (input) {

    if (app.utility.isObjectNull(input)) {
        return true;
    }
    if (!isNaN(input) && isFinite(input) &&
        ("" + input).indexOf("-") == -1 && ("" + input).indexOf(".") == -1 && ("" + input).indexOf("e") == -1) {
        return true;
    }

    return false;
};


app.utility.isNumberValue = function (input) {
    if (!isNaN(input) && isFinite(input)) {
        return true;
    }

    return false;
};


app.utility.doHttpRequest = function (input) {

    if (app.utility.isObjectNull(input) || app.utility.isObjectNull(input.rURL)) {
        app.utility.showDialog("Error!", "Unable to find required inputs. Error in sending request");
        return false;
    }

    app.consolePrintInfo("HTTP REQUEST:  ", "[URL] :" + input.rURL);
    app.consolePrintInfo("HTTP REQUEST:  ", "[Type] :" + input.rType);
    app.consolePrintInfo("HTTP REQUEST:  ", "[Input] :" + input.rDataToSend);

    $.ajax({
        url: input.rURL,
        type: input.rType,
        contentType: 'application/json',
        cache: false,
        data: input.rDataToSend,
        dataType: 'json'
    }).success(function (response) {
        app.consolePrintInfo("HTTP REQUEST:  ", "[Output - success] :" + JSON.stringify(response));

        if (!app.utility.isObjectNull(input.rOnSuccessFunction)) {
            input.rOnSuccessFunction(response);
        }
        else if (!app.utility.isObjectNull(input.rOnSuccessMessage)) {
            app.utility.showDialog("Complete", input.rOnSuccessMessage);
        }
    }).error(function (response) {
        if (response.status == 401) {
            // session expired. redirect to login page.
            app.consolePrintInfo("HTTP REQUEST:  ", "[Output - failure] : Session Expired");
            var $message = $('<div><p>' + response.responseText + '</p></div>')
                .dialog({autoOpen: false, width: 300, title: 'Session Expired', modal: true, buttons: {
                    Ok: function () {
                        $(this).dialog("close");
                        // Remove the cached data
                        //comp_storage.remove("lastStoredValue");
                        //comp_storage.remove("permissionStr");
                        //window.open("/aid-web/logout", "_self");
                        app.utility.doLogout();
                    }
                }}
            );
            $message.dialog('open');
        }
        else if (response.status == 400) {
            app.consolePrintInfo("HTTP REQUEST:  ", "[Output - failure] : Server Error");
            var $message = $('<div><p>' + response.responseText + '</p></div>')
                .dialog({autoOpen: false, width: 300, title: 'Server Error', modal: true, buttons: {
                    Ok: function () {
                        $(this).dialog("close");
                    }
                }}
            );
            $message.dialog('open');
        }
        else {
            app.consolePrintInfo("HTTP REQUEST:  ", "[Output - failure] :" + response.responseText);

            if (!app.utility.isObjectNull(input.rOnErrorFunction)) {
                input.rOnErrorFunction(response.responseText);
            }
            else if (!app.utility.isObjectNull(input.rOnErrorMessage)) {
                app.utility.showDialog("Error", input.rOnErrorMessage);
            }
        }
    });

};

app.utility.doLogout = function () {
    comp_storage.remove("lastStoredValue");
    comp_storage.remove("permissionStr");
    window.open("/aid-web/logout", "_self");
};

// common
// Nav bar component

app.common.navbar.reRenderNavBar = function (content) {
    // [SAMPLE] To update the common component. create a view model of that
    // component. set the needed variables.
    // and *definately call applyBindings()*

    app.common.navbar.navBarViewModel = new ko.navBarComponent.viewModel({
        // set compt. values if needed. like below.
        //navBarComponent_isEmpty:ko.observable(false)
    });
    app.common.navbar.navBarViewModel.navBarComponent_reRender(content);
    ko.applyBindings(app.common.navbar.navBarViewModel, $('#nav-bar').get(0));
}

// Authorisation component
app.common.authorisation.storeRoleInfo = function (permissionArr) {
    comp_auth.storeRoleInfo(permissionArr);
};

app.common.authorisation.isRolePresent = function (roleName) {
    return comp_auth.isRolePresent(roleName);
};


// validation
app.validation.highlightElement = function (id, text) {

}

app.validation.highlightError = function (eleId, heading, text) {
    if (!app.utility.isObjectNull(heading) && !app.utility.isObjectNull(text) && !app.utility.isObjectNull(eleId)) {
        $("#" + eleId).addClass("ui-state-error");
        var $message = $('<div><p>' + text + '</p></div>')
            .dialog({
                autoOpen: true,
                width: 300,
                title: heading, modal: true,
                close: function () {
                    setTimeout(function () {
                        jQuery("#" + eleId).removeClass("ui-state-error");
                    }, 500);
                },
                buttons: {
                    Ok: function () {
                        $(this).dialog("close");
                        setTimeout(function () {
                            jQuery("#" + eleId).removeClass("ui-state-error");
                        }, 500);
                    }
                },
                overlay: {
                    opacity: 0.1,
                },

            }
        ).parent().addClass("ui-state-error");
    }
}
&#13;
&#13;
&#13;

0 个答案:

没有答案