1. 程式人生 > >polyfill 一個解決兼容的絕佳方案

polyfill 一個解決兼容的絕佳方案

tle code browser script style font != 幫助 實現

polyfill為何物

Polyfill你可以理解為“膩子”,就是裝修的時候,可以把缺損的地方填充抹平。

舉個例子,html5的storage(session,local), 不同瀏覽器,不同版本,有些支持,有些不支持。

我們又想使用這個特性,怎麽辦?

有些人就寫對應的Polyfill(Polyfill有很多),幫你把這些差異化抹平,不支持的變得支持了(簡單來講,寫些代碼判斷當前瀏覽器有沒有這個功能,沒有的話,就寫一些支持的補丁代碼)。

你只需要把需要的Polyfill引入到你的程序裏,就可以了。

比如下面就是對html5各個特性支持的Polyfill,你需要哪個,就引入哪個。當然,你也可以自己寫 :)

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

舉個例子,有些舊瀏覽器不支持Number.isNaN方法,Polyfill就可以是這樣的:

if(!Number.isNaN) {
    Number.isNaN = function(num) {
        return(num !== num);
    }
}

啥意思呢,就是假如瀏覽器沒有Number.isNaN方法,那咱們就給它添加上去,所謂Polyfill就是這樣解決API的兼容問題的。

shim和polyfill有什麽區別

在JavaScript的世界裏,有兩個詞經常被提到,shim和polyfill.它們指的都是什麽,又有什麽區別?
一個shim是一個庫,它將一個新的API引入到一個舊的環境中,而且僅靠舊環境中已有的手段實現
一個polyfill就是一個用在瀏覽器API上的shim.我們通常的做法是先檢查當前瀏覽器是否支持某個API,如果不支持的話就加載對應的polyfill.然後新舊瀏覽器就都可以使用這個API了.術語polyfill來自於一個家裝產品Polyfilla:

Polyfilla是一個英國產品,在美國稱之為Spackling Paste(譯者註:刮墻的,在中國稱為膩子).記住這一點就行:把舊的瀏覽器想象成為一面有了裂縫的墻.這些[polyfills]會幫助我們把這面墻的裂縫抹平,還我們一個更好的光滑的墻壁(瀏覽器)
Paul Irish發布過一個Polyfills的總結頁面“HTML5 Cross Browser Polyfills”.es5-shim是一個shim(而不是polyfill)的例子,它在ECMAScript 3的引擎上實現了ECMAScript 5的新特性,而且在Node.js上和在瀏覽器上有完全相同的表現(譯者註:因為它能在Node.js上使用,不光瀏覽器上,所以它不是polyfill).

本文轉自網絡,來自 segmentfault 與 百度知道 。

polyfill 一個解決兼容的絕佳方案