HTML5中polyfills的含义是什么?

Jit*_*yas 372 javascript html5 fallback shim polyfills

HTML5中polyfills的含义是什么?我在许多网站上看到过关于HTML5的这个词,例如HTML5-Cross-Browser-Polyfills.

所以我们在这里收集所有垫片,后备和polyfill,以便在本身不支持它们的浏览器中植入HTML5功能.

我其实不明白polyfills是什么意思.

它是一种新的HTML5技术还是JavaScript库?我从来没有在HTML5之前听过这个词.

垫片,后备和填充物之间有什么区别?

Cal*_*dge 365

polyfill是一种浏览器后备,由JavaScript构建,允许您希望在现代浏览器中工作的功能在旧版浏览器中工作,例如,支持旧版浏览器中的canvas(HTML5功能).

它是一种HTML5技术,因为它与HTML5结合使用,但它不是HTML5的一部分,你可以在没有HTML5的情况下使用polyfill(例如,支持你想要的CSS3技术).

这是一篇好文章:

http://remysharp.com/2010/10/08/what-is-a-polyfill/

以下是Polyfill和Shims的完整列表:

https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-browser-Polyfills

  • 垫片更加普遍.polyfill是一种垫片.这是一个很好地解释它的问题:http://stackoverflow.com/questions/6599815/what-is-the-difference-between-a-shim-and-a-polyfill (15认同)
  • 所以它的意思是ie7.js也是一个polyfill (6认同)
  • https://remysharp.com/2010/10/08/what-is-a-polyfill这个链接不仅仅是一个"好帖子"它实际上是创造这个词的人的完整定义和词源.摘录:"产品Polyfilla(在美国腻子)是一种糊状物,可以放入墙壁以覆盖裂缝和孔洞." 该帖子还涵盖了垫片早于和polyfill不同的概念.这是必须阅读的,IMO. (6认同)

小智 63

首先让我们澄清一下polyfil不是什么:polyfill不是HTML5标准的一部分.即使您经常在这些上下文中看到polyfill被引用,但polyfill也不限于Javascript.

术语"polyfill"本身指的是一些代码,"允许您在当前或"现代"浏览器中使用某些特定功能,以便在其他不支持内置功能的浏览器中工作."

这里的polyfill的来源和例子:

http://www.programmerinterview.com/index.php/html5/html5-polyfill/


小智 29

polyfill是一段代码(或插件),它提供了开发人员期望浏览器本机提供的技术.

  • 好解释。 (2认同)

Ric*_*erd 14

polyfill是一种垫片,它通过调用垫片来替换原始调用.

例如,假设您要使用navigator.mediaDevices对象,但并非所有浏览器都支持此对象.您可以想象一个提供垫片的库,您可以像这样使用:

<script src="js/MediaShim.js"></script>
<script>
    MediaShim.mediaDevices.getUserMedia(...);
</script>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您显式调用填充程序而不是使用原始对象或方法.另一方面,polyfill替换原始对象上的对象和方法.

例如:

<script src="js/adapter.js"></script>
<script>
    navigator.mediaDevices.getUserMedia(...);
</script>
Run Code Online (Sandbox Code Playgroud)

在您的代码中,它看起来好像您正在使用标准的navigator.mediaDevices对象.但实际上,polyfill(示例中的adapter.js)已将此对象替换为自己的对象.

它取而代之的是一个垫片.这将检测该功能是否是本机支持的,如果是,则使用它,如果不是,它将使用其他API解决它.

因此,polyfill是一种"透明"的垫片.这就是Remy Sharp(创造这个术语)的意思,当说" 如果你删除了polyfill脚本,你的代码将继续工作,尽管polyfill被删除,但不需要任何改变 ".

  • 什么是垫片? (8认同)
  • @Oliver Watkins 如果您熟悉适配器模式,那么您就知道垫片是什么。Shims 拦截 API 调用并在调用者和目标之间创建一个抽象层。通常垫片用于向后兼容 (4认同)