【问题标题】:Cross-browser JS standardizer [closed]跨浏览器 JS 标准化器 [关闭]
【发布时间】:2013-10-08 23:00:30
【问题描述】:

是否有一个库可以让所有浏览器的 JS 接口都符合 W3C 标准?

例如,基于attachEvent,将addEventListener 添加到IE8。

【问题讨论】:

  • 是的。试试这个:badassjs.com/post/20294238453/… :)
  • @KonstantinK 对于愚人节来说有点晚/早了;)
  • @KonstantinK,可以使用 Bellard 的浏览器内 Linux,在其中运行图形界面,然后在其中打开一些浏览器,如果不是 2013 年末,当时浏览器速度非常慢的话。所以对我来说这似乎不是一个愚人节的玩笑:)
  • 当然有可能,这就是为什么他们在 IE8 中打开 Object.defineProperty 来修改 DOM 原型:所以你可以让 IE8+ 表现得像 W3 浏览器(添加诸如 classList、dataset、firstElementChild 等内容)。修补系统上的大多数冲突源于使用浏览器嗅探而不是对象检测的脚本。如果你给 IE 打了补丁,你就不需要很多常见的低级库的 IE 分支。您还可以包含仅 JS 的升级(也缺少),例如 danml.com/js/f.js (es5) 和 danml.com/js/es6.js 以使核心 JS 保持最新(尽可能)。

标签: javascript cross-browser w3c


【解决方案1】:

每个现代 javascript 框架都为您提供了解决浏览器 js 实现中这些不一致的方法(如 jQuery 的 on 处理 addEventListener/attachEvent)。然而,这些框架中的大多数不使用该方法来更改主机对象(这被认为是有问题的),但它们的方法在内部映射到特定浏览器中可用的相应功能。

我建议您尝试其中一种流行的框架(例如 jQuery、MooTools 或 Dojo,仅举几个比较流行的框架)。

我建议不要使用直接改变宿主对象的框架(因为他们中的一些人在早期尝试过,后来发现这会导致很多问题)。

【讨论】:

  • 问题是jQuery和其他JS框架没有被W3C标准化,每一个动作都增加了一点开销。此外,由于 JS 接口(即 XSL)的多样性,它们绝不是完整的。然而,我们必须使用它们。
  • 对原生对象修改的问题有很好的解释吗?
  • @polkovnikov.ph 将“所有浏览器”增强到同一级别的库不会产生开销吗?你问的是不可能的。唯一像这样的东西就是某种插件,比如Google Chrome Frame
  • @polkovnikov.ph perfectionkills.com/… 是讨论扩展主机对象的一个​​例子。
  • 反正会有开销,而且修改原生对象的时候不知道会不会更小,因为我没见过这样的解决方案。为什么你说不可能完成上述任务?顺便说一句,那篇文章说修改本机/主机对象的主要问题是有可能失去对 W3C 规范的遵从性,这显然不会发生在我所询问的库中。
猜你喜欢
  • 2011-08-03
  • 2013-09-03
  • 1970-01-01
  • 1970-01-01
  • 2014-08-06
  • 2012-05-28
  • 2013-04-24
  • 2021-02-23
  • 2011-08-03
相关资源
最近更新 更多