【发布时间】:2011-03-24 23:11:34
【问题描述】:
是否有一个 JavaScript 框架专注于通过调整实现差异来扩展 JavaScript?我的意思不是简单地跨不同浏览器提供相同功能的框架,而是使非标准浏览器表现得好像它们符合标准的东西。
基本上,我想要对 JavaScript 做的事情就像 ie7.js 对 MSIE 所做的那样,或者 html5shiv 对于 HTML5 元素所做的事情。或者 Web Sockets 或 Canvas 的各种解决方法。
我想 jQuery 和它的同类可以解决这个问题,但我更喜欢允许我编写普通、符合标准的 JavaScript 的东西,就好像浏览器之间没有差异一样。
编辑:正如所有其他答案似乎都指出,是的,jQuery 是 JavaScript,是的,大多数 JavaScript 框架都试图提高跨浏览器的兼容性,让我澄清一下我的意思。
如今,跨浏览器的 JavaScript 实现之间的差异与语言本身没有太大关系。除了旧浏览器中缺少一些内置方法外,这些类型的行为也大多相同。但是仍然存在差异,尤其是在目前的现状(Chrome/Firefox/Safari)和 MSIE 的旧版本(即 MSIE 7)之间。最值得注意的是,DOM 的 API 往往具有或多或少的微妙特性。
我不想要一个框架,让我编写可以在大多数浏览器上运行的 JavaScript。那是一毛钱。我想要一个薄层,让我可以编写在现代浏览器和旧版浏览器中都可以使用的代码。 jQuery、Dojo 等都超越了这一点,提供了自己独特的 API,而不是统一现有的 API。
说“使用 jQuery”就像说如果我想避免跨浏览器呈现差异,我应该使用 Rich Ajax Platform(或其他代码生成框架)。我不想要一个“替代品”,我想要一个“错误修复”(不是字面意思)。
EDIT2:只是为了说明这一点:我不是在寻找任何框架。我对 jQuery 非常熟悉,已经尝试过 YUI,目前正在考虑尝试 Dojo。我不只是想要一个“好”的框架。我想要一个符合我非常具体的描述的。如果没有类似的东西也没关系,尽管知道为什么不会很有趣(即技术原因,而不是“每个人都忙于使用 jQuery”)。
【问题讨论】:
-
所有 javascript 框架都旨在最大限度地减少跨浏览器问题。
-
@Sarfraz,从概念上讲,是的。它们总是旨在跨不同的浏览器工作,但它们不是通过清理 API 而是通过提供自己的 API 来做到这一点的。
-
必须对所有“使用 jQuery”的答案感到沮丧。我知道你非常清楚 jQuery 及其类似的东西是什么以及做什么。
-
没有机会。 IE 不公开 DOM 节点的原型,因此如果不对每个单独的节点进行扩展,就无法扩展它们。我认为您不想在每次获得新节点引用时调用函数来标准化您的节点(例如
var el = someNode.nextSibling; fixUp(el); var matchingEls = el.getElementsByClassName("someclass");)
标签: javascript ajax javascript-framework