使用ES5 shim与jquery/mootools/prototype

10

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

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

即使仅包含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>

1
你的 main.js 文件在做什么?你在哪里遇到了错误,是哪一个?我把我的水晶球落在家里了。 - Bergi
@Bergi 我的 main.js 目前是空的。错误信息是:对象不支持此属性或方法 - a.ie8.js,第46行第428个字符 - Greg
那个文件的第46行(及其上下文)是什么? - Bergi
3个回答

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中也遇到了错误。

1
这是一个晚回答,可能并没有解决你的主要问题。据我所知,Github项目ES5-DOM-SHIM不仅提供ES5功能的shim,而且还试图为IE上不可用的DOM功能提供shim。如果你希望直接使用DOM API编程,这非常有用。
jQuery也提供了兼容层,以检查功能是否可用来填补实现差距(因此如果你的代码只使用jQuery,则不需要DOM polyfill)。
混合两者似乎不是一个好主意,因为:
- 你在JS中重复了很多polyfill逻辑。 - Polyfill有局限性,因此如果jQuery认为你的浏览器完全支持一个功能,而它实际上不支持,你可能会遇到一些意外错误。
如果你只想要JavaScript polyfills,请尝试使用https://github.com/kriskowal/es5-shim(注意ES5-DOM-SHIM是基于它的)。

0
首先,请确保在您的HTML文档中添加doctype:
<!DOCTYPE html>

它必须位于您的HTML文件的第一行。这使得旧版IE能够以标准兼容模式工作并避免一些怪异问题。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接