bug 查找 (一) 快速记录 IE8 下三个问题

昨天 pc 端网站上灰度,发现多个在 IE8 下的问题,描述和解决方案如下:

第一个问题是 css 文件过大

现象

把项目所有的 css 打包成单个文件,在现代的浏览器下是没有问题的,在 IE11 下的 IE8 模式也是没有问题。 但是在真实的 IE8 下,发现某个页面的 css 不能生效,百思不得其解。

然后,几个人在代码层面逐步排查问题,排查方法是:写一个 body 样式,放在不同的位置去试试,看看是否生效,同时把不能原来不生效的 css 全部注释掉。

已过几轮的调整,发现在主文件 index.css 引入新模块之后,再之后引入的 css 都不能起做用。为了验证,把新模块注释又可以使用,又把老的注掉新的模块也能使用。猜测 ie8css 的大小是有限制的。

解决方案

将新的模块单独打包成一个文件,同 index.css 一起引入页面,解决该问题。

搜了一下网上,老外也有这个问题:目前不大清楚是 file size 引起的,还是 css selector 引起的。我觉得应该是 css selector 引起的,因为 file size 会被 gzip 压缩。改天实验一下。另外发现这个问题 ie9 也有。

链接

  1. ie8-9-maximum-bytes-for-css-file

相邻兄弟选择器不能重绘的问题

现象

相邻兄弟选择器控制,也就是 +,来控制某个元素的显示,在 ie8 下不能生效。

解决方案

借鉴网上的思路,让浏览器强制重绘。方案是,在需要重绘的地方,在 body 元素,增加一个 css class,然后移除该 css class ,就达到这个目的。这个 css class 应该是没有任何效果的。

$('body').addClass('ietest');
$('body').removeClass('ietest');

链接:

  1. CSS 相邻兄弟选择器

伪类不能重绘的问题

现象

使用伪类 ::before ,发现不起作用。

解决方案

改变伪类的 content 的内容,改成 . 空格(容易被打包工具给处理掉)之类的来解决。

content: '.';
content: ' ';

总结

打包和压缩问题

打包要保证打包行为的一致性。就是说在测试环境打出来的包和生产环境打出来的包行为要一致。碰到好几次问题就是在两个环境大包出来的不一样。这里调试碰到的问题是空格在生产环境中被压缩成空字符串了。

不要使用 IE11 下的 IE8 模式进行验证

做过 IE 下兼容性问题的人都应该知道,在 IE11 开发者工具下面有个 IE8 的兼容模式,这很方便,一般情况下也够用。但是对前面所说的第一个问题(css 的大小问题),在这种兼容模式下是没有办法重现的。因此真的兼容 IE8 的话,还是要用真实的 IE8 环境来验证一下吧,模拟环境不可靠。

控制 css 的大小

对于 css 的大小的问题以后应该做模块化处理。相关页面请加载自己的 css 和基础的 css 。其他不相关的 css 不应该放在一起。这是对打包工具的要求。采用这种方案就能很好的解决 css 大小的问题。

希望不要去兼容 IE8

最根本的解决方案是,不去兼容 IE8 了。显然这是不可能的,因为网站流量中有一部分还是用的 IE8 ,没有到忽略不计的程度,IE8 还是逃不掉的。

最后

希望我说的对你有用,谢谢。

快速记录 IE8 下三个问题的更多相关文章

  1. # bug 查找 (一) 快速记录 IE8 下三个问题

    bug 查找 (一) 快速记录 IE8 下三个问题 昨天 pc 端网站上灰度,发现多个在 IE8 下的问题,描述和解决方案如下: 第一个问题是 css 文件过大 现象 把项目所有的 css 打包成单个 ...

  2. IE8下JQuery clone 出的select元素使用append添加option异常解决记录

    遇到一个怪现象,由于配置参数是多实例的, 故采用JQuery对模板HTML代码进行clone, HTML代码中包括select标签, 在克隆之后需要对select进行添加option. 在firefo ...

  3. 解决Socket.IO在IE8下触发disconnect时间过长

    本文地址: http://www.cnblogs.com/blackmanba/p/solve-socketIO-IE8-emit-disconnect-too-long.html或者http://f ...

  4. Windows系统下三十款优秀开源软件

    Windows系统下三十款优秀开源软件 1.Firefox 官方网站:http://www.getfirefox.com/ 可替换Internet Explorer 功能特点:如果你还没有使用Fire ...

  5. ie8下jquery改变PNG的opacity出现黑边,ie6下png透明解决办法

    目前互联网对于网页效果要求越来越高,不可避免的用到PNG图片,PNG分为几种格 式,PNG8 PNG24 PNG32,其中最常用的,也是显示效果和大小比较适中的则是PNG24,支持半透明,透明,颜色也 ...

  6. IE8下兼容rgba颜色的半透明背景

    在工作中做一个图片半透明遮罩时发现在IE8下不兼容 一查再知道IE8不支持rgba颜色,再搜搜兼容性方法,没想到这么快就解决了. 先说说rgba的含义: r代表red,g代表green,b代表blue ...

  7. ajax请求在ie8下缓存问题

    我今天在改项目bug的时候,发现ajax请求在ie8下有缓存,在缓存过期之前,针对相同地址发起的多个Ajax请求,只有第一次会真正发送到服务端.在某些情况下,这种默认的缓存机制并不是我们希望的(比如获 ...

  8. 记录Linux下安装elasticSearch时遇到的一些错误

    记录Linux下安装elasticSearch时遇到的一些错误 http://blog.sina.com.cn/s/blog_c90ce4e001032f7w.html (2016-11-02 22: ...

  9. 使用 CodeIgniter 框架快速开发 PHP 应用(三)

    原文:使用 CodeIgniter 框架快速开发 PHP 应用(三) 分析网站结构既然我们已经安装 CI ,我们开始了解它如何工作.读者已经知道 CI 实现了MVC式样. 通过对目录和文件的内容进行分 ...

随机推荐

  1. easyui 使用随笔

    1,datagrid 翻页,记住翻页前的复选框. 在onLoadSuccess:function 中,去掉 清楚选择选项 onLoadSuccess:function(){ //tab.datagri ...

  2. UVa 11242 - Tour de France

    题目大意:竞赛用自行车前轮有f个齿轮,后轮有r个齿轮,根据比率计算一个spread(传播率?). 很直接的题,排序然后找商的最大值就好了,uhunt上标明level 4,我都不敢相信会这么简单,还一直 ...

  3. robotium从入门到放弃 一 测试开发环境搭建

    1.JDK的安装及环境变量的配置    配置JAVA的运行环境,添加完环境变量后,可以打开Windows命令处理程序窗口,通过执行命令java -version验证环境变量是否添加成功.如果添加成功会 ...

  4. PHP中file_exists与is_file、is_dir的区别,以及执行效率的比较

    判断文件是否存在,有2个常用的PHP函数:is_file 和 file_exists, 判断文件夹是否存在,有2个常用PHP函数:is_dir 和 file_exists, 即 file_exists ...

  5. javascript设计模式之解释器模式详解

    http://www.jb51.net/article/50680.htm 神马是“解释器模式”? 先翻开<GOF>看看Definition:给定一个语言,定义它的文法的一种表示,并定义一 ...

  6. NodeMCU之旅(一):构建、刷入固件,上传代码

    扬帆起航 本系列文章将试图实现,使用Web页面远程点亮led.具体包括: 在NodeMCU上搭建HTTP服务器,使其可以通过Web页面配置要接入的网络. 在配置页面可以显示附近中英网络名与信号强度. ...

  7. oracle闪回技术总结之闪回数据库

    [实施步骤] 步骤一.设置如下的初始化参数: Sql>小时:以分钟为单位 SQL> 点00分左右发现表被删除 切了几个归档 22:00:38SQL>:06:05 SQL> :0 ...

  8. Bootstrap相关的网站

    http://www.bootcss.com/ http://expo.bootcss.com/ http://www.webresourcesdepot.com/20-beautiful-resou ...

  9. 游戏开发之UE4添加角色到场景中

    接着上次继续学习,现在我们已经有了一个场景并且运行了,我们需要添加一个角色到场景中.要这样做,我们必须从UE4的GameFramework类继承它. 一. 创建一个从Character类继承的类 从基 ...

  10. Bootstrap入门(二十三)JS插件1:模态框

    Bootstrap入门(二十三)JS插件1:模态框 1.静态实例 2.动态实例 3.模态框的尺寸和效果 4.包含表单的模态框 模态框经过了优化,更加灵活,以弹出对话框的形式出现,具有最小和最实用的功能 ...