自己做的网站和ie不兼容,这简直是每个前端开发者的噩梦。真的,每次听到客户或者测试说“在IE浏览器里打开全是乱的”,我心里那股火蹭蹭往上冒。不是我不愿意修,是IE这老古董浏览器,简直就是个定时炸弹,随时准备把你精心设计的布局炸得稀巴烂。
我最近又遇到了这个问题,客户非要我在IE11上跑通他们的官网。我心想,现在都2024年了,谁还用IE啊?但客户不懂技术,他们只认结果。没办法,只能硬着头皮改。改完之后,我发现自己做的网站和ie不兼容的问题,其实主要集中在CSS渲染和JavaScript语法上。
第一步,检查DOCTYPE声明。别笑,这真的很重要。很多新手为了省事,直接写个html标签,或者DOCTYPE写得不规范。IE对DOCTYPE非常敏感,如果DOCTYPE缺失或者错误,IE会进入怪异模式(Quirks Mode),这时候你的CSS盒模型就全乱了。我的建议是,老老实实写上标准的HTML5 DOCTYPE:。这一步虽然简单,但能解决30%的布局错乱问题。
第二步,处理CSS前缀。IE11虽然支持大部分CSS3属性,但有些属性还是需要加前缀的。比如flex布局,在IE10和IE11中,你需要使用-ms-前缀。还有transform、transition这些动画属性,虽然IE11支持,但为了保险起见,最好还是加上-ms-前缀。我之前的一个项目,就是因为忘了加-ms-flex,导致导航栏在IE里直接换行了,丑得没法看。
第三步,JavaScript兼容性。这是最头疼的部分。现在的前端框架,比如Vue、React,默认都是针对现代浏览器优化的。如果你用了箭头函数、let/const、Promise这些ES6+的特性,IE直接报错。我之前的做法是,在构建工具里配置Babel,把代码转译成ES5。但这还不够,有些API,比如fetch,IE根本不认识。这时候,你需要引入polyfill。推荐使用core-js和whatwg-fetch。在入口文件里引入它们,就能模拟出IE需要的环境。
第四步,条件注释和JS判断。虽然IE11已经不支持条件注释了,但在一些老项目中,可能还会用到。你可以用JS来判断浏览器类型,然后加载不同的CSS或JS文件。比如:
if (/@cc_on!@/false || !!document.documentMode) {
// IE浏览器
document.write('');
}
这段代码虽然有点古老,但在某些极端情况下还是管用的。不过,我强烈建议,除非万不得已,否则不要为了IE去写大量的兼容代码。
第五步,测试。别以为改完了就没事了。一定要在IE11里反复测试。用F12开发者工具,切换到文档模式为IE10或IE9,看看有没有问题。有时候,IE11没问题,IE10就炸了。我有一次就栽在这个坑里,以为IE11能跑就行,结果客户用的是内网的老系统,强制用IE10模式打开,直接白屏。
说实话,自己做的网站和ie不兼容,真的让人头大。但没办法,谁让客户是上帝呢?我只能一边骂骂咧咧,一边加polyfill。最后,当看到IE里页面终于正常显示的时候,那种成就感,真的比喝了十杯咖啡还提神。
如果你也遇到了自己做的网站和ie不兼容的问题,别急着放弃。从DOCTYPE、CSS前缀、JS转译、polyfill这几个方面入手,一步步排查。虽然过程痛苦,但解决后的那种爽感,是无与伦比的。
最后,说一句真心话,如果可能,还是劝劝你的客户,换个现代浏览器吧。IE真的不值得你花这么多时间去兼容。但如果是为了工作,那就只能认命,好好把坑填平吧。希望我的这些经验,能帮你少掉几根头发。毕竟,头发已经够少了,别再因为IE掉光了。