常见的IE错误

IE中常见的几个JavaScript错误:

(1)操作终止

在IE8之前的版本中,存在一个错误:操作终止(operation aborted)。在修改尚未加载完成的页面时,就会发生操作终止错误。发生错误时,会出现一个模态对话框,告诉你“操作终止“。单击确定(OK)按钮,则卸载整个页面,继而显示一张空白屏幕。

示例:

 

<!DOCTYPE html>

<html>

<head>

<title>Operation Aborted Example</title>

</head>

<body>

<div>

<script type="text/javascript">

document.body.appendChild(document.createElement("div"));

</script>

</div>

</body>

</html>

 

       这个例子存在的问题:<script>元素还不是<body>元素的直接子元素,被包含在div容器里,JavaScript代码使用appendChild()修改该元素的父类或者祖先类,此时页面尚未加载完毕违背了只能修改已经加载完毕的元素的约定,发生了操作终止错误。

避免这个问题:等到目标元素加载完毕后再对其操作;添加一个绝对定位在页面上的覆盖层+换成insertBefore()方法:

修改div中的方法:

<div>

<script type="text/javascript">

document.body.insertBefore(document.createElement("div"),document.body.firstChild);

</script>

</div>

 

       修改后的例子,<div>元素被添加在document.body的开头部分而非末尾部分,执行这个操作需要的  信息已经在脚本运行时已知,不会引发错误。

(2)无效字符

根据语法,JavaScript文件必须只包含特定的字符 。在JavaScript文件中存在无效字符时,IE会抛出无效字符错误。无效字符即JavaScript语法中未定义的字符。

(3)未找到成员

IE中的所有DOM对象都是以COM对象非原生JavaScript对象的形式实现的,这就会导致一些与垃圾回收机制相关的非常奇怪的行为。IE中的未找到成员错误,就是由于垃圾收集例程配合错误直接导致的。具体讲,如果在对象被销毁后又给对象赋值,就会导致未找到成员错误。发生这个错误最常见的是event对象的时候。IE中的event对象是window的属性,该对象在事件发生时创建,在最后一个事件处理程序执行完毕后销毁。如下示例:

document.onclick=function(){

var event=window.event;

setTimeout(function(){

event.returnValue=false;//未找到成员错误

},1000);

};

 

注册一个单击事件,在事件处理中,window.event被保存在event变量中。然后传入setTimeout()中的闭包里又包含了 event变量。当单机事件处理程序执行完毕,event对象会被销毁,因而闭包中引用的对象的成员就不存在了。在对象被销毁后又给对象成员returnValue赋值,就会导致未找到成员错误。

(4)未知运行时错误

当使用innerHTML、outerHTML方式指定html时会发生未知运行错误:把块元素插入到了行内元素;访问表格任意部分的任意属性时。比如:<span>标签不能包含<div>之类的块级元素,在遇到把块元素插入到了行内元素这种不恰当的时候其他浏览器会试图纠正并隐藏错误,IE会直接抛出错误。

(5)语法错误

通常IE报错语法错误一般是代码少了分号,或者花括号的前后不对应。如果有引用外部文件如JavaScript,但是没有返回JavaScript如:<script >的src属性指向了一个html类型的文件,就会抛出语法错误。

(6)系统无法找到指定资源

IE限制了js中使用的URL长度,而且也限制用户在浏览器自身中使用的URL长度。IE还有一个对url路径不能超过2048个字符的限制,当不符合条件时就会抛出错误。避免的方法,URL起名字精简,请求方法修改为post,通过请求体而不是查询字符串来发送数据。

 

 

 

 

 

转载于:https://my.oschina.net/u/3544533/blog/1607964

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值