标签归档:ie

IE的“c00ce56e”bug

很简单的一个jQuery AJAX请求文件,IE8下报:

Could not complete the operation due to error c00ce56e.

检查网上都说是编码问题,不过写的不是太明确,因为我们服务器的文件编码都已经是UTF-8
最后找到说明

The problem occurs when setting the charset of a response to a XMLHttpRequest to utf8 instead of UTF-8 or ISO-8859-1 instead of ISO8859_1. IE7 is very strict on naming of the charsets.

“ISO8859_1” is the canonical representation of the Latin-1 character encoding string in the Java language and class libraries. The standard that is defined by the Internet Assigned Numbers Authority, however, is “ISO-8859-1”, which is not an accepted alias.

For more information refer: http://support.microsoft.com/default.aspx?scid=kb;en-us;304625

于是打开nginx的配置文件,把所有“utf8”替换成“UTF-8”,问题解决

IE8回车提交表单的bug

这回中枪的不是IE6了,更悲剧

问题发生的条件:

表单所在容器载入时是display:none,且表单内包含超过一个的文本框
这时候在表单内按回车就无法触发表单的submit事件(只有一个文本框时正常)

如果载入时是display:none的以后再怎么显示也没有用了

解决办法:

  • 载入DOM完毕后再隐藏元素
    这个应该是根本解决办法,但是实际操作起来很麻烦。
    首先用户可能看到不期望的显示内容闪烁,然后在一些场合下先显示会导致JS计算占位出问题(例如很多带Overlay的弹出层显示实现)
  • 强制绑定keydown事件
    判断浏览器的版本,根据需要强制绑定回车键按下的事件处理
  • 不处理
    这是我目前的处理方法,不纵容M$,哈哈

同样的bug还存在于目前最新版本的IE9测试版本中
不得不说IE真是一个奇葩,还是系列的

参考文章:
http://stackoverflow.com/questions/1427912/in-ie8-enter-key-in-a-form-does-not-work
http://stackoverflow.com/questions/964734/hitting-enter-does-not-post-form-in-ie8

[温故而知新]再谈IE中li之间高度空隙的问题

时隔两年之后,再次碰到IE6、IE7下li高度占用的bug,2008年的文章在这里

之前的老办法还是能解决问题的,然后顺便研究了一下。

首先是症状的发生条件:

  • 1、IE6、IE7
  • 2、li内嵌其他容器,不仅限于超链接,我测试过span等也有此问题
  • 3、高度低于某个值,这个值我没有严格测试过,但是我把li的高度设置成30px的时候没问题,18px的时候就有问题

问题解决办法:

  • 1、给li附加样式

    li.classname {
    float: left;
    width: 100%;
    }
  • 2、将li设置成inline,给内嵌容器设置宽度

    li.classname {
    height: 18px;
    line-height: 18px;
    display:inline;
    }
    li.classname a {
    display: block;
    width: 100%;
    }

有时候注释也不能乱写

让我们看看这个很简单的例子:







尝试分别在各种浏览器下运行它:






在大多数情况下,我们得到了正确的预期中的结果,如下图所示:
大多数浏览器下的执行效果

但是不要忘了神一般的IE6,OMG,发生了什么:
IE6下的运行效果

经过我一个像素一个像素的测量,发现当其中一个div减少3px的时候,在IE6下就能并排显示
这个数值很容易让人想到The IE6 Three Pixel Gap,但也不是这个问题,真正的原因在于那句注释,将注释去掉就能在IE6下也得到正确的结果

有时候嵌套过多时,我们为了方便地找到嵌套的首位,会比较习惯于在开始和结束的地方加上注释,这时候如果碰到float就要慎重了,我测试了将注释换行或者加上空行分隔,都不能解决此问题

再次呼吁抛弃IE6!

另外还有css和js文件的注释,最好写英文注释,当然最好的习惯是将所有文件保存为统一编码
我碰到的几次问题是utf8的html引入编码为ansi的js文件,结果由于字符集的问题导致js中的单行(即//开头的注释)中文注释不能正确断行,导致下一行本应执行的语句被注释掉,由此可以推出一个好的编码习惯,即在单行注释末尾也加分号