小凯love 2016-08-12 10:29 采纳率: 0%
浏览 3419

chrome与ie兼容问题---js文件在chrome解析没有问题在ie解析报错

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))

  • 写回答

2条回答 默认 最新

  • 当作看不见 2016-08-12 10:50
    关注

    浏览器兼容,没谁能救了,(作死的IE),

    评论

报告相同问题?

悬赏问题

  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
  • ¥20 yolov5自定义Prune报错,如何解决?