2011-08-17 61 views
276

Ý nghĩa của các polyfills trong HTML5 là gì? Tôi đã thấy từ này trong nhiều trang web về HTML5, ví dụ: HTML5-Cross-Browser-Polyfills.Ý nghĩa của các polyfills trong HTML5 là gì?

Vì vậy, ở đây chúng tôi đang thu thập tất cả các miếng chêm, fallbacks, và polyfills để cấy ghép chức năng HTML5 trong trình duyệt mà không natively hỗ trợ họ.

Tôi thực sự không hiểu ý nghĩa của các polyfills là gì.

Đây có phải là kỹ thuật HTML5 mới hoặc thư viện JavaScript không? Tôi chưa từng nghe từ này trước HTML5.

Và sự khác biệt giữa shims, fallbacks và polyfills là gì?

+1

Bạn có thể kiểm tra để hiểu rõ hơn http://blogs.msdn.com/b/jennifer/archive/2011/08/04/html5-part-4-using-html5-while-retaining-support-for-older -browsers.aspx –

+0

@ user3400622 Cảm ơn bạn đã liên kết, giải thích trong liên kết rất rõ ràng. –

Trả lời

278

Chèn lấp là trình duyệt dự phòng, được tạo bằng JavaScript, cho phép chức năng bạn làm việc trong trình duyệt hiện đại hoạt động trong trình duyệt cũ hơn, ví dụ: hỗ trợ canvas (tính năng HTML5) trong trình duyệt cũ hơn. Đây là một kỹ thuật HTML5, vì nó được sử dụng kết hợp với HTML5, nhưng nó không phải là một phần của HTML5, và bạn có thể có các polyfills mà không cần HTML5 (ví dụ, để hỗ trợ các kỹ thuật CSS3 mà bạn muốn).

Dưới đây là một bài viết tốt:

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

Dưới đây là một danh sách toàn diện của Polyfills và shims:

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

+4

Vì vậy, nghĩa là ie7.js cũng là một polyfill –

+1

Có: "Nhiều bản sửa lỗi bao gồm độ trong suốt PNG, kiểu CSS/bộ chọn, hiển thị sửa lỗi, v.v ..." Nó thêm chức năng này thông qua javascript mà trình duyệt không hỗ trợ. –

+1

Tôi nghĩ từ Polyfills xuất hiện sau HTML5. Shim có khác với Polyfills không? –

43

Trước hết chúng ta hãy làm rõ những gì một polyfil không phải là: Một polyfill không phải là một phần của Tiêu chuẩn HTML5. Cũng không phải là một polyfill giới hạn trong Javascript, mặc dù bạn thường thấy các polyfill được giới thiệu trong các ngữ cảnh đó.

Bản thân thuật ngữ polyfill tự đề cập đến một số mã "cho phép bạn có một số chức năng cụ thể mà bạn mong đợi trong trình duyệt hiện tại hoặc" hiện đại "cũng hoạt động trong các trình duyệt khác không hỗ trợ chức năng đó."

Nguồn và ví dụ về polyfill đây:

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

11

một polyfill là một đoạn mã (hoặc plugin) cung cấp các công nghệ mà bạn, nhà phát triển, hy vọng các trình duyệt để cung cấp nguyên bản.

+0

Cũng được giải thích. –

11

Một polyfill là một hình thái mà thay thế cuộc gọi ban đầu bằng lệnh gọi đến một cảnh báo.

Ví dụ: giả sử bạn muốn sử dụng đối tượng navigator.mediaDevices, nhưng không phải tất cả trình duyệt đều hỗ trợ điều này. Bạn có thể tưởng tượng một thư viện cung cấp một shim mà bạn có thể sử dụng như thế này:

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

Trong trường hợp này, bạn rõ ràng gọi một shim thay vì sử dụng đối tượng hoặc phương pháp gốc. Mặt khác, mặt khác, thay thế các đối tượng và các phương thức trên các đối tượng gốc.

Ví dụ:

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

Trong code của bạn, có vẻ như bạn đang sử dụng đối tượng các navigator.mediaDevices chuẩn. Nhưng thực sự, polyfill (adapter.js trong ví dụ) đã thay thế đối tượng này bằng một đối tượng riêng của nó.

Cái mà nó đã thay thế bằng một hình thái. Điều này sẽ phát hiện nếu tính năng này được hỗ trợ nguyên bản và sử dụng nó nếu nó được, hoặc nó sẽ làm việc xung quanh nó bằng cách sử dụng các API khác nếu nó không phải là.

Vì vậy, một polyfill là một loại shim "trong suốt". Và đây là những gì Remy Sharp (người đặt ra thuật ngữ) có nghĩa là khi nói "nếu bạn đã xóa tập lệnh chèn lấp, mã của bạn sẽ tiếp tục hoạt động mà không có bất kỳ thay đổi nào được yêu cầu mặc dù polyfill bị xóa".

+2

shim là gì? –

+0

@Oliver Watkins Nếu bạn đã quen thuộc với mẫu bộ điều hợp, thì bạn biết những gì một shim là. Shims chặn các cuộc gọi API và tạo ra một lớp trừu tượng giữa người gọi và mục tiêu. Thông thường shims được sử dụng để tương thích ngược –

Các vấn đề liên quan