最近在解决IE兼容性的问题,进行一下总结:
1、常用调试语句如下:(很多兼容性的问题,不会报错,因此就需要添加输出,通过输出结果查看问题出在哪里)
(1)查看运行步骤是否有问题:
var i = 0; // 声明一次即可
console.log("click:" + i++ + "."); // 标记可能出错误的地方
(2)查看变量值是否正确:(var为变量)
console.log("var:" + var + ".");
(3)增加弹出框,暂时阻止程序运行:(var为变量)
alert("var:" + var + ".");
2、IE 时间格式不支持2017-08-21 00:00:00,需要转换为2017/08/21 00:00:00,转换方式如下:
var arg = "2017-08-21 00:00:00";
// var myDate = new Date(arg); // error
var myDate = new Date(Date.parse(arg.replace(/-/g, "/")));
3、json序列化
JSON.parse(data); // String to json
JSON.stringify(data); // json to String
4、页面跳转,需要增加bathPath,否则IE无法确定新的地址;(Java)
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<script type="text/javascript">
var basePath = "<%=basePath%>";
</script>
5、特殊情况一定要增加判断条件,否则也会出现无法预料的错误
if (var === 'undefined') {
do something;
}
6、JavaScript转义字符(JavaScript中拼装HTML的时候,要注意转移字符,否则也可能会出现问题。最好不拼装)
\' 单引号
\" 双引号
\& 和号
\\ 反斜杠
\n 换行符
\r 回车符
\t 制表符
\b 退格符
\f 换页符
7、函数参数默认值
// 其他浏览器支持, IE不支持
function myFun(arg1 = 'default', arg2 = 'default') {
// do something
}
// IE浏览器 上面的写法看起来也不标准
function myFun(arg1, arg2) {
// set default value
arg1 = arg1 || 'default';
arg2 = arg2 || 'default';
// do something
}
8、引入新的方法、框架的时候,一定要先查一下浏览器的兼容性,降低返工的风险;