使用ES5 shim和jquery / mootools / prototype

时间:2012-11-09 10:10:23

标签: javascript jquery ecmascript-5 shim

我偶然发现了这个项目:https://github.com/termi/ES5-DOM-SHIM,它在包括旧IE在内的所有浏览器中提供了几乎完整的ES5支持。

我一直在纯JS项目中使用它,但现在我在项目中使用jquery / mootools / prototype(使用High Charts)。

即使只包含jquery脚本也会导致IE8中出现错误以及此填充程序。我怎样才能保持两全其美?

我的文档头像这样:

<!--[if lte IE 8]>
<script src="/js/a.ie8.js"></script>
<![endif]-->
<script src="/js/a.js"></script>
<script src="/js/jquery.1.8.2.js"></script>
<script src="/js/main.js"></script>

3 个答案:

答案 0 :(得分:1)

确保使用正确的html结构,例如:

<!DOCTYPE html>
<head>
    <meta charset="UTF-8">
    <!--[if lte IE 8]>
    <script src="a.ie8.js"></script>
    <![endif]-->
    <script src="a.js"></script>
    <script src="jquery.1.8.2.js"></script>
    <script src="main.js"></script>
</head>
<body>

</body>

当我测试你的结构(没有doctype)时,我在IE中也遇到了错误。

答案 1 :(得分:1)

这是一个迟到的答案,可能并不能解决您的主要问题。所以冒着被投票的风险......

从Github项目我可以看出,ES5-DOM-SHIM不仅提供了ES5功能的垫片,而且还试图填充IE上没有的DOM功能。如果您希望直接使用DOM API编程,这非常有用。

jQuery还提供了一个兼容性层,它可以进行功能检查以填补实现空白(如果您的代码只使用jQuery,则不需要DOM polyfill)。

混合两者似乎不是一个好主意,因为:

  • 你在JS中复制了很多polyfill逻辑。
  • Polyfill有局限性,因此如果jQuery认为您的浏览器完全支持某项功能,则可能会出现意外错误。

如果您只想使用JavaScript polyfills,请尝试使用https://github.com/kriskowal/es5-shim(注意ES5-DOM-SHIM基于它)

答案 2 :(得分:0)

首先,请务必在HTML文档中添加doctype:

<!DOCTYPE html>

它必须位于HTML文件的第一行。这使得旧的IE能够在符合标准的模式下工作并避免一些怪癖。

另一方面,ES5-DOM-SHIM似乎尝试做太多,你现在想要使用jQuery,它已经提供了处理跨浏览器的DOM不一致的方法。

我建议您只使用jQuery,如果需要支持新的HTML5元素和/或自定义元素,请使用HTML5shiv(在IE上添加HTML5元素支持的事实方法)。如果您确实需要ES5 / 6垫片,请使用社区提供更广泛支持的库,例如es5-shimes6-shim