最近公司的项目要求支持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=""
后续慢慢更新.....