为什么JavaScript在浏览器中不一致?

Nul*_*ion 12 javascript cross-browser

这是我在无数个小时修复JS与跨浏览器兼容(主要是IE)后一直在思考的问题:为什么 Javascript 在浏览器中不一致

我的意思是,为什么JS不能像Java和Flash一样好看?相反,我们必须采用像jQuery这样的框架.不要误会我的意思,他们让我的生活更轻松 - 但为什么他们甚至首先存在?

这有历史原因吗?推出浏览器的公司是否只运送自己的JS引擎?使标准化如此困难的政治是什么?

(注意:我知道问题的很大一部分是与DOM相关的,但问题仍然存在).

med*_*iev 16

Java脚本语言核心大部分一致的(参见ECMAScript中于1999年发布了第3版)

这是导致头痛的DOM实现.部分原因是因为在某一点上没有DOM规范,因此浏览器可以在构成访问和操作网页中的html元素的规则方面做任何他们想做的事情.

例如:

  • window.addEventListener对于DOM支持浏览器,而window.attachEvent对于IE.
  • textContent适用innerText于IE的DOM支持浏览器.
  • IE中附加事件处理程序的内存泄漏,因此您必须手动卸载它们
  • getElementById 在IE和Opera中是错误的,因为它按名称返回元素
  • getAttribute('href') 返回不一致的值

还有与浏览器的CSS支持有关的问题.

  • IE6不支持本机PNG,因此您不得不使用过滤器库
  • 处理过滤器不透明度的IE中的越野车动画

语言核心不一致就是这样的

  • 正则表达式引擎之间的不一致

但是,是的,简而言之就是之前,没有标准.从那以后,w3提出了标准,但每个浏览器供应商都有自己的方式来实现它.没有管理机构强制供应商完全应用规范.

  • `Array.prototype.indexOf`不是ECMAScript v3的一部分.Mozilla在2004/2005年把它扔进了Gecko.IE6是在99-00开发的,并在01年发布.那么,如果它不在语言中,他们怎么能实现呢? (2认同)

Pek*_*ica 7

推出浏览器的公司是否只运送自己的JS引擎?

是的,这可能是主要原因.没有统一的JS引擎; 有各种ECMAScript实现.

  • 就像具有渲染的浏览器一样,有不同的方式来解释规范,实现它们的不同方式,甚至更糟糕:填补差距规范的不同方法离开! (2认同)