IE8兼容性问题记录

最近公司的项目要求支持IE8,所以就开始了做IE8的兼容了,本人记录了遇到的问题极其解决方案

之前在chrome中能够正常运行,在IE8中出现的问题

 

IE8中不支持就query中的getJSON()方法,这个可以在自己的工具类js中封装,

封装如下

 

var Tool = function() {};
Too.getJson = function (url, params, success, asynous, error, load) {
      //请求的同步异步设置
      if(asynous != true) {
              asynous = false;
      }
       $.ajax({
              url : url,
              type : "GET",
              data : params,
              dataType : "json",
              success : success,
              complete :  load,
              error : error,
              async :asynous
       });
};

 另外最后一行绿色标注的地方注意,如果后面加了",",可能在IE中会报"缺少标识符、字符串或者数字的异常",另外报相同错误的可能原因还有在json字符串的key中使用了js的关键字,如:class,

 

2.如果代码中有console语句会出现console未定义的错误,我当时是去掉了,如果有更好的解决方案请提出

 

3.IE8中不识别JSON,如果要使用JSON.parse或者stringify方法,可以在代码中添加如下代码

var JSON = JSON || {};

// implement JSON.stringify serialization
JSON.stringify = JSON.stringify || function (obj) {

var t = typeof (obj);
if (t != "object" || obj === null) {

    // simple data type
    if (t == "string") obj = '"'+obj+'"';
    return String(obj);

}
else {

    // recurse array or object
    var n, v, json = [], arr = (obj && obj.constructor == Array);

    for (n in obj) {
        v = obj[n]; t = typeof(v);

        if (t == "string") v = '"'+v+'"';
        else if (t == "object" && v !== null) v = JSON.stringify(v);

        json.push((arr ? "" : '"' + n + '":') + String(v));
    }

    return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}");
}
};

// implement JSON.parse de-serialization
JSON.parse = JSON.parse || function (str) {
if (str === "") str = '""';
eval("var p=" + str + ";");
return p;
 };

 该代码来自:http://stackoverflow.com/questions/3326893/is-json-stringify-supported-by-ie-8

其他方案也有可行的,自己尝试

 

4.table中的样式display:none;可能导致不显示,可以改为block table-row

 

其他更过ie兼容参见:http://www.wufangbo.com/ie6-ie7-ie8-css-bug-2/

 

5.关于同样的url在其他浏览器可能经过编码了,但是IE中是没有编码的,所以你访问时会出现错误,你可以在url打开前进行编码,使用encodeURI(url)就行,但是这样你如果有链接跟后面相同,则会在连续切换几次后链接失效,实际上不是链接失效了,而是因为每次你都在解析,尤其%解析后是%25,如果你发现你的url中含有很多25,这就是你每次转码后没有解码的结果,处理方式是,encodeURI(decodeURI(url)).

 

6.关于样式问题,在使用的样式中如果使用display:none想要达到隐藏的效果但是有些东西就是隐藏不了,你可以使用visibility:hidden;另外自己写的鼠标移上去提示效果,有时在其他的浏览器都行,但是在IE就行,如果是其他的文本什么的可以使用title="提示的文字",如果是图片的提示可以使用alt=""

 

后续慢慢更新.....

 

你可能感兴趣的:(IE8兼容,IE兼容)