HTML5のポリフィルの意味は何ですか?


387

HTML5のポリフィルの意味は何ですか?HTML5-Cross-Browser-Polyfillsなど、HTML5に関する多くのサイトでこの言葉を見ました。

したがって、ここでは、シム、フォールバック、およびポリフィルをすべて収集して、それらをネイティブでサポートしていないブラウザーにHTML5機能を埋め込んでいます。

ポリフィルの意味がわかりません。

それは新しいHTML5テクニックですか、それともJavaScriptライブラリですか?HTML5の前にこの言葉を聞いたことがありません。

そして、シム、フォールバック、ポリフィルの違いは何ですか?



@ user3400622リンクをありがとう、リンクの説明は非常に明確です。
Andrew Lam 2017年

回答:


377

ポリフィルはJavaScriptで作成されたブラウザーフォールバックであり、これにより、最新のブラウザーで機能すると期待される機能を古いブラウザーで機能させることができます。たとえば、古いブラウザーでキャンバス(HTML5機能)をサポートできます。

これはHTML5と組み合わせて使用​​されるため、HTML5手法の一種ですが、HTML5の一部ではなく、HTML5がなくてもポリフィルを使用できます(たとえば、必要なCSS3手法をサポートするため)。

ここに良い記事があります:

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

以下は、ポリフィルとシムの包括的なリストです。

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


6
つまり、ie7.jsもポリフィルであることを意味します
Vyas

1
はい:「PNG透過性、CSSスタイル/セレクター、レンダリングのバグ修正など、多くの修正」ブラウザがまだサポートしていないJavaScriptを介してこの機能を追加しています。
Calvin Froedge、2011

1
ポリフィルという言葉はHTML5の後に登場したと思います。シムはポリフィルとは異なりますか?
Jitendra Vyas、2011

16
シムはより一般化されています。ポリフィルはシムの一種です。ここではそれをよく説明する質問です:stackoverflow.com/questions/6599815/...
カルバンFroedge

6
remysharp.com/2010/10/08/what-is-a-polyfillこのリンクは単なる「良い投稿」ではありません。実際には、単語を作り出した人による単語の完全な定義と起源です。抜粋:「製品Polyfilla(米国ではパッケージング)は、亀裂や穴を覆うために壁に貼り付けることができるペーストです。」この記事では、shimが以前から使用していたポリフィルとは異なる概念についても説明します。それは必読です、IMO。
アーロンコーディング、2015

64

まず、ポリフィルが何でないかを明確にしましょう。ポリフィルはHTML5標準の一部ではありません。また、ポリフィルがJavascriptに限定されているわけではありませんが、それらのコンテキストでポリフィルが参照されることがよくあります。

ポリフィルという用語自体は、「現在のブラウザまたは「最新」のブラウザで期待される特定の機能を、その機能のサポートが組み込まれていない他のブラウザでも動作するようにすることを可能にする」コードを指します。

ここにポリフィルのソースと例:

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


31

ポリフィルは、開発者がブラウザーがネイティブに提供することを期待するテクノロジーを提供するコード(またはプラグイン)です。


2
よく説明しました。
Eugen Sunic 2017

16

ポリフィルは、元の呼び出しをシムへの呼び出しに置き換えるシムです。

たとえば、navigator.mediaDevicesオブジェクトを使用したいが、すべてのブラウザがこれをサポートしているわけではないとします。次のように使用できるシムを提供するライブラリを想像できます。

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

この場合、元のオブジェクトまたはメソッドを使用する代わりに、shimを明示的に呼び出しています。一方、ポリフィルは、元のオブジェクトのオブジェクトとメソッドを置き換えます。

例えば:

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

コードでは、標準のnavigator.mediaDevicesオブジェクトを使用しているように見えます。しかし、実際には、ポリフィル(この例ではadapter.js)がこのオブジェクトを独自のオブジェクトで置き換えています。

交換したのはシムです。これにより、機能がネイティブでサポートされているかどうかが検出され、サポートされている場合は使用されます。サポートされていない場合は、他のAPIを使用して機能が回避されます。

つまり、ポリフィルは一種の「透明な」シムです。そして、これは「ポリフィルスクリプトを削除した場合、ポリフィルが削除されているにもかかわらず変更を必要とせずに、コードは引き続き機能します」と言ったときに、レミーシャープ(この用語を作り出した)が意味したことです


9
シムとは?
Oliver Watkins

3
@Oliver Watkinsアダプターパターンに精通している場合は、shimについて理解しています。ShimsはAPI呼び出しをインターセプトし、呼び出し元とターゲットの間に抽象レイヤーを作成します。通常、シムは下位互換性のために使用されます
Anurag Ratna

@AnuragRatna混乱を避けるために「インターセプト」を使用しません。インターセプトは通常、(透過的に)インターセプトするコードを指します。つまり、呼び出し側に知らされていません。Shims は下位互換性のための API呼び出しを提供します
Qetesh '
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.