首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何提供ECMAScript 5 (ES 5)-shim?

问如何提供ECMAScript 5 (ES 5)-shim?
EN

Stack Overflow用户
提问于 2012-01-04 19:32:34
回答 3查看 15.4K关注 0票数 37

ECMAScript第五版(2009年12月发布)介绍了一系列新方法(详见这张桌子 )。但是,仍然有一些较旧的浏览器没有实现这些新方法。

幸运的是,有一个方便的脚本(用JavaScript编写)-- ES5-shim --它在不存在这些方法的环境中手动实现这些方法。

但是,我不知道如何提供ES5-shim.我是否应该把它“给”所有浏览器,就像这样:

代码语言:javascript
复制
<script src="es5-shim.js"></scipt>

或者我应该包括一个检查,以便只“麻烦”那些真正需要它的浏览器,如下所示:

代码语言:javascript
复制
<script>
    if ( !Function.prototype.hasOwnProperty( 'bind' ) ) {
        (function () {
            var shim = document.createElement( 'script' );
            shim.src = 'es5-shim.js';
            var script = document.getElementsByTagName( 'script' )[0];
            script.parentNode.insertBefore( shim, script );
        }());
    }
</script>

(我使用Function.prototype.bind来检查浏览器是否实现了所有新的ECMAScript 5方法。根据我上面链接的兼容性表,bind是实现ECMAScript 5方法的“最后一个堡垒”。)

当然,要使这个shim生效,它必须在所有其他脚本之前执行,这意味着我们希望在页面的早期(在头中,在所有其他脚本元素之前)包含上面提到的脚本元素。

那么,第二个示例是否是向浏览器提供ECMAScript 5-shim的好方法呢?有更好的方法吗?

EN

回答 3

Stack Overflow用户

发布于 2012-01-04 19:34:48

ES5-Shim只会使浏览器无法实现的部分产生震动,所以只需将其提供给所有浏览器即可。它将处理哪些需要闪烁,哪些不需要。

但是,请注意列出的在某些情况下哪些shims不能正确工作的注意事项。我在过去曾对此有过异议,这会造成巨大的痛苦,直到你意识到答案非常简单.

票数 23
EN

Stack Overflow用户

发布于 2013-08-31 01:52:55

这似乎适用于我:

代码语言:javascript
复制
<!--[if lt IE 9]><script src="java/es5-shim.min.js"></script><![endif]-->
票数 14
EN

Stack Overflow用户

发布于 2012-01-04 19:49:01

目前,最适合ES5-Shim的解决方案是在所有环境中使用该库,并允许它检测在运行时需要修补哪些特性。更好的方法是从社区CDN中交付它,以最大限度地增加跨站点缓存的命中次数。

尽管如此,仍然有一个开放的机会来创建将特征检测、代理指纹和动态绑定结合起来的系统,从而自动生成和交付目标shim子集。这个问题的范围远远超出了ES5-Shim的范围,可以适用于各种类型的安全措施。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8732846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档