10

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

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

即使只是包含 jquery 脚本,也会导致在 IE8 中与此 shim 一起引发错误。我怎样才能保持两全其美?

我的文档头如下所示:

<!--[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>
4

3 回答 3

1

这是一个较晚的答案,可能无法解决您的主要问题。所以冒着被否决的风险......

据我所知,从 Github 项目 ES5-DOM-SHIM 不仅为 ES5 功能提供 shim,而且还尝试填充 IE 上不可用的 DOM 功能。如果您希望直接使用 DOM API 进行编程,这将非常有用。

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

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

  • 您在 JS 中复制了很多 polyfill 逻辑。
  • Polyfill 有局限性,所以如果 jQuery 认为您的浏览器完全支持某个功能,而实际上它不支持,您可能会遇到一些意外错误。

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

于 2013-11-23T13:30:49.100 回答
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>

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

于 2013-07-16T09:07:48.207 回答
0

首先,一定要在你的 HTML 文档中添加一个 doctype:

<!DOCTYPE html>

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

另一方面,ES5-DOM-SHIM似乎尝试做太多事情,而您目前想使用jQuery,它已经提供了处理跨浏览器的 DOM 不一致性的方法。

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

于 2014-02-10T03:56:08.773 回答