公司的产品大部分的用户可能还在使用IE8,无奈兼容IE8重构中,其实对于兼容IE8没有太多的抗拒,这么久了网上关于如何兼容IE的资料比较多,整体看来没有什么特别大的坑。

起手式

如果需要兼容IE8,那就应该放弃绝大多数的现代javascript框架,使用HTML+ajax的方式或服务端模板渲染引擎开发,这样可以减少很多的问题,推荐使用下面的配置:

  • jquery-1.12.4.min.js (用于ajax请求,DOM操作及事件监听,一定要使用2.0以下的版本)
  • bootstrap3.3.7(用于系统中美观度要求较高,需要定制开发的页面)
  • layUI2.5.6(用于系统中无需设计的功能页面的开发)
  • echarts3.8.4 注意使用定制版本,勾选兼容IE8,即使这样,在IE8下某些图标仍会丢失部分样式。
  • 阿里图标库

其他的内容就靠自己手写啦!

使用html或服务端模板渲染,会带来代码结构的问题,建议可采用iframe的形式加载新的页面。

IE8 兼容bootstrap自适应及栅格布局

这个相对比较简单,只要在html body标签下添加以下内容:

<!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
  <!--[if lt IE 9]>
  <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
  <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->

清除IE下滚动条

.menu-list-container {
  width: 250px;
  height: 100%;
  overflow-y: auto;
  float: left;
  scrollbar-width: none;
  /* Firefox */
  -ms-overflow-style: none;
  /* IE 10+ */
}

.menu-list-container::-webkit-scrollbar {
  display: none;
  /* Chrome Safari */
}

这里需要注意下IE8的滚动条隐藏比较麻烦,需要用div嵌套遮挡的方式,感觉没有必要,故IE8下这个解决方案是有问题的

清除iframe标签边框

iframe 最好采用absolute布局,避免因为iframe边框的宽度撑开父级容器,从而导致页面在IE浏览器中发生意料之外的滚动,可参考一下布局:

.detail-container {
  height: 100%;
  margin-left: 500px;
  background-color: #edf6fd;
  position: relative;
}

.detail-container iframe {
  width: 100%;
  height: 100%;
  border: none;
  position: absolute;
  top: 0;
  left: 0;
  border: 0;
}

清除IE8下的iframe边框需要额外为iframe标签添加如下属性:

<iframe frameborder="0"></iframe>