js文件在chrome解析没有问题在ie解析报错,下面有代码
;(function(G) {
"use strict"
// 以下域名用从property的配置中来, jsp在header中输出
// 注意协议配置~ https 或者 http 必须配置正确~
// window.HOST_TMS_BASIC = "https://tms-basic.test.yunshanmeicai.com"
// window.HOST_TMS2 = "https://tms2.test.yunshanmeicai.com"
// window.HOST_TMS_CENTER = "https://tms-center.test.yunshanmeicai.com"
// window.HOST_GIS = "http://gis.test.yunshanmeicai.com/"
// conf
// 多域名支持
let multiHost = true
// 注意:
// href 配置
// 多域名环境nav中href必须配置 window.location.href.split("?")[0] 例子: href: "https://tms-center.test.yunshanmeicai.com/controller/action"
// 非多域名只需要配置 window.location.pathname href: "/controller/action"
G.NAV_MENUS = [
]
$.ajax({
url:"/menu/getAllMenu",
async:false,
success: function(data){
// G.NAV_MENUS = data.menus;
if(data.success){
// 修改http协议与浏览器的协议相一致
if(data.menus != null){
var currentProtocol = window.location.protocol;
var menus = data.menus;
for(var i=0;i < menus.length;i++){
if(menus[i].href != "" || menus[i].subMenu == null){
if(menus[i].href.indexOf("http:") != -1){
data.menus[i].href = menus[i].href.replace('http:',currentProtocol);
}else if(menus[i].href.indexOf("https:") != -1){
data.menus[i].href = menus[i].href.replace('https:',currentProtocol);
}
}else{
var subMenus = menus[i].subMenu
for(var j = 0;j <subMenus.length;j++){
if(subMenus[j].href != "" || subMenus[i].subMenu == null){
if(subMenus[j].href.indexOf("http:") != -1){
data.menus[i].subMenu[j].href = subMenus[j].href.replace('http:',currentProtocol);
}else if(subMenus[j].href.indexOf("https:") != -1){
data.menus[i].subMenu[j].href = subMenus[j].href.replace('https:',currentProtocol);
}
}else{
var grandsonMenus = subMenus[j].subMenu;
for(var k = 0;k < grandsonMenus.length;k++){
if(grandsonMenus[k].href != ""){
if(grandsonMenus[k].href.indexOf("http:") != -1){
data.menus[i].subMenu[j].subMenu[k].href = grandsonMenus[k].href.replace('http:',currentProtocol);
}else if(grandsonMenus[k].href.indexOf("https:") != -1){
data.menus[i].subMenu[j].subMenu[k].href = grandsonMenus[k].href.replace('https:',currentProtocol);
}
}
}
}
}
}
}
}
G.NAV_MENUS = data.menus;
}
}
});
let navStyle = '
.nav li.active {
background-color: #346190;
}
.dropdown-submenu { position: relative; }
.dropdown-submenu>.dropdown-menu {
top: 0;
left: 100%;
margin-top: -6px;
margin-left: -1px;
-webkit-border-radius: 0 6px 6px 6px;
-moz-border-radius: 0 6px 6px;
border-radius: 0 6px 6px 6px;
}
.dropdown-submenu:hover>.dropdown-menu { display: block; }
.dropdown-submenu>a:after {
display: block;
content: '';
float: right;
width: 0;
height: 0;
border-color: transparent;
border-style: solid;
border-width: 5px 0 5px 5px;
border-left-color: #ccc;
margin-top: 5px;
margin-right: -10px;
}
.dropdown-submenu:hover>a:after { border-left-color: #fff; }
.dropdown-submenu.pull-left { float: none; }
.dropdown-submenu.pull-left>.dropdown-menu {
left: -100%;
margin-left: 10px;
-webkit-border-radius: 6px 0 6px 6px;
-moz-border-radius: 6px 0 6px 6px;
border-radius: 6px 0 6px 6px;
}'
if(!G.HOST_TMS_BASIC || !G.HOST_TMS2 || !G.HOST_TMS_CENTER || !G.NAV_MENUS || !G.HOST_TMC_MONITOR || !G.HOST_TMS_TRACK) {
alert('!G.HOST_TMS_BASIC || !G.HOST_TMS2 || !G.HOST_TMS_CENTER || !G.NAV_MENUS || !G.HOST_TMC_MONITOR || !G.HOST_TMS_TRACK')
}
if(G.NAV_MENUS && Array.isArray(G.NAV_MENUS)) {
var style = document.createElement("style")
style.innerHTML = navStyle
document.body.appendChild(style)
let pathname = multiHost ? window.location.href.split("?")[0] : window.location.pathname
document.querySelector(".nav.navbar-nav.navbar-left").innerHTML = renderNav(NAV_MENUS, pathname)
let $breadCurmb = document.querySelector("#tmc_breadcrumb")
$breadCurmb.style.display = ""
$breadCurmb.innerHTML = renderBreadCurmb(NAV_MENUS, pathname)
// 干掉sso导致的俩面包屑
let _breads = document.querySelectorAll(".breadcrumb")
if(_breads.length <= 1) {
return
}
_breads = [].slice.call(_breads)
_breads.shift()
for(let _bread of _breads) {
_bread.parentElement.removeChild(_bread)
}
}
/**
@author xiaofeng
*/
function renderBreadCurmb(navs, path) {
let breadCurmb = ""
let paths = findPath(navs, path)
if(paths.length === 0) {
return breadCurmb
}
let activePath = paths.pop()
for(let path of paths) {
breadCurmb += <li><a href="${path.href ? path.href : '#'}">${path.text}</a></li>
}
breadCurmb += <li class="active">${activePath.text}</li>
return breadCurmb
}
/**
}
*
*/
function renderNav(navs, path) {
"use strict"
function _menu(menus, arr) {
arr.push(<ul class="dropdown-menu">
)
for(let menu of menus) {
if(menu.isDivider) {
arr.push(<li class="divider"></li>
)
continue
}
let hasSubmenu = Array.isArray(menu.subMenu) && menu.subMenu.length > 0
if(hasSubmenu) {
arr.push(<li class="dropdown-submenu">
)
arr.push(<a href="#" class="dropdown-toggle" data-toggle="dropdown">${menu.text}</a>
)
_menu(menu.subMenu, arr)
arr.push(</li>
)
} else {
arr.push(<li class="${menu.isActive ? 'active' : ''}">
)
arr.push(<a href="${menu.href ? menu.href : '#'}" target="${menu.target ? menu.target : ''}">${menu.text}</a>
)
arr.push(</li>
)
}
}
arr.push(</ul>
)
}
// 激活当前path父菜单
active(navs, path)
let arr = []
// arr.push(<ul class="nav navbar-nav navbar-left">
)
for(let nav of navs) {
if(nav.isDivider) continue
let hasSubmenu = Array.isArray(nav.subMenu) && nav.subMenu.length > 0
if(hasSubmenu) {
arr.push(<li class="${nav.isActive ? 'active' : ''}">
)
arr.push(<a href="" class="dropdown-toggle" data-toggle="dropdown">${nav.text}<b class="caret"></b></a>
)
_menu(nav.subMenu, arr)
arr.push(</li>
)
} else {
arr.push(<li class="${nav.isActive ? 'active' : ''}">
)
arr.push(<a href="${nav.href ? nav.href : '#'}" target="${nav.target ? nav.target : ''}">${nav.text}</a>
)
arr.push(</li>
)
}
}
// arr.push(</ul>
)
return arr.join("")
}
/**
@author xiaofeng
*/
function active(navs, path) {
"use strict"
if(!path || path === "/") {
for(let nav of navs) {
if(nav.isDivider) continue
nav.isActive = true
return
}
return
}
function _inMenu(menus, path) {
for(let menu of menus) {
if(menu.isDivider) continue
let hasSubmenu = Array.isArray(menu.subMenu) && menu.subMenu.length > 0
if(hasSubmenu) {
if(_inMenu(menu.subMenu, path)) {
return true
}
} else if(menu.href === path) {
return true
}
}
return false
}
for(let nav of navs) {
if(nav.isDivider) continue
let hasSubmenu = Array.isArray(nav.subMenu) && nav.subMenu.length > 0
let isActive = false
if(hasSubmenu) {
isActive = _inMenu(nav.subMenu, path)
} else if (nav.href === path) {
nav.isActive = true
}
nav.isActive = isActive
}
}
/**
@author xiaofeng
*/
function findPath(navs, path) {
"use strict"
// index
if(!path || path === "/") {
for(let nav of navs) {
if(nav.isDivider) continue
return [nav]
}
return []
}
function _findPath(menus, path, paths) {
for(let menu of menus) {
if(menu.isDivider) continue
paths.push(menu)
let hasSubmenu = Array.isArray(menu.subMenu) && menu.subMenu.length > 0
if(hasSubmenu) {
if(_findPath(menu.subMenu, path, paths)) {
return true
} else {
paths.pop()
}
} else if(menu.href === path) {
return true
} else {
paths.pop()
}
}
return false
}
let paths = []
_findPath(navs, path, paths)
return paths
}
} (window))
浏览器兼容,没谁能救了,(作死的IE),
let改为var,这个是es6的关键字,ie不支持es6,edge不懂是否支持,没有win10.
低版本的Firefox,chrome也不支持,es6的支持还不是很广泛,尽量少用es6的编写代码。