HTML5中polyfills的含义是什么?我在许多网站上看到过关于HTML5的这个词,例如HTML5-Cross-Browser-Polyfills.
所以我们在这里收集所有垫片,后备和polyfill 为了在没有的浏览器中植入HTML5功能 本地支持他们。
我实际上不明白polyfills是什么意思。
是新的HTML5技术还是JavaScript库?我从来没有在HTML5之前听过这个词。
垫片,后备和polyfills有什么区别?
答案 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/