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)
}
}
/**
- 渲染面包屑导航
- @param array navs
- @param string path
- @return string
-
@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
}
/**
- bootstrap3 层级菜单
- @param array navs [menu1, menu2, ...] menu结构见下方
- @param string path
- @return string
- @author xiaofeng *
- menu 结构
- {
- isDivider: false, 是否分隔线,可选,默认false
- // 废弃,修改为自动处理 isActive: false, 是否激活,可选,默认false
- href: "#", 链接,可选,默认#
- target: "", target,可选,默认""
- text: "",导航文本,必填!!!
- subMenu: [], 子菜单,可选,递归嵌入menu结构
-
}
*
*/
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("")
}
/**
- 标记激活
- @param array navs 导航配置
- @param string path path
-
@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
}
}
/**
- 寻找无级菜单路径
- @param array navs
- @param string path
- @return array
-
@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))