HTML5中polyfills的含义是什么?

时间:2011-08-17 02:27:05

标签: javascript html5 fallback polyfills shim

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

  

所以我们在这里收集所有垫片,后备和polyfill   为了在没有的浏览器中植入HTML5功能   本地支持他们。

我实际上不明白polyfills是什么意思。

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

垫片,后备和polyfills有什么区别?

6 个答案:

答案 0 :(得分:343)

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

答案 1 :(得分:58)

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

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

这里的polyfill的来源和例子:

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

答案 2 :(得分:24)

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

答案 3 :(得分:14)

polyfill是一个垫片,通过调用垫片来替换原始呼叫。

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

<script src="js/MediaShim.js"></script>
<script>
    MediaShim.mediaDevices.getUserMedia(...);
</script>

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

例如:

<script src="js/adapter.js"></script>
<script>
    navigator.mediaDevices.getUserMedia(...);
</script>

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

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

因此,polyfill是一种透明的&#34;垫片。这就是Remy Sharp(创造这个术语)的意思,当你说#34; 如果你删除了polyfill脚本时,你的代码会继续工作,尽管polyfill被删除仍然无需任何更改&#34;

答案 4 :(得分:1)

Web 开发中的polyfill 是在不支持该功能的 Web 浏览器上实现该功能的代码。它通常是指实现 HTML5 或 CSS 网络标准的 JavaScript 库,既可以是现有浏览器上的既定标准(受某些较旧浏览器支持),也可以是提议标准(不受任何浏览器支持)。根据定义,“polyfill 是浏览器 API 的垫片”。

HTML5 标准不包含 polyfill。 Polyfill 不仅限于 Javascript,尽管它们在该上下文中经常被提及。

答案 5 :(得分:0)

除了其他答案以外,这里还有一些可能有用的高级思想和信息。

填充文件就像是针对特定浏览器的兼容性补丁。 垫片是对特定参数的更改。 如果说@mediaquery与浏览器不兼容,则可以使用备用。

这取决于您的应用/网站需要与哪些内容兼容。

您可以检查该站点,以了解特定库与特定浏览器的兼容性。 https://caniuse.com/