2014-12-03 80 views
0

在過去的時間裏,如果我不知道的東西支持與否,爲什麼要使用modernizr?是什麼,如果(Modernizr.history)

我的類型,如果(東西),如果(的window.history)之間的差異{ ...}在Javascript中。

最近我發現Modernizr也很容易檢測到瀏覽器的支持。

它將添加類爲HTML並創建一個名爲Modernizr的對象,

但我困惑,爲什麼我們不若(東西)使用,但如果(Modernizr.something)

例如:

if(window.history){...}和if(Modernizr.history){...}之間的區別是什麼?

+2

[邊緣情況](https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js)。 – JJJ 2014-12-03 10:33:42

+0

@Juhana我從網站上下載了開發版本,只發現這裏面:'tests ['history'] = function(){return !!(window.history && history.pushState);};'。你知道爲什麼它與存儲庫不同嗎? – 2014-12-03 10:45:22

回答

3

因爲它並不總是那麼簡單。如果你只需要檢查window.history你不需要modernizr。但是如果你必須檢查其他期貨,你應該使用modernizr,因爲它已經實現了最好的和輕量級的方法來檢測這個期貨。看看源代碼,例如hashchange檢測:

isEventSupported = (function() { 

    var TAGNAMES = { 
    'select': 'input', 'change': 'input', 
    'submit': 'form', 'reset': 'form', 
    'error': 'img', 'load': 'img', 'abort': 'img' 
    }; 

    function isEventSupported(eventName, element) { 

    element = element || document.createElement(TAGNAMES[eventName] || 'div'); 
    eventName = 'on' + eventName; 

     var isSupported = eventName in element; 

    if (!isSupported) { 
      if (!element.setAttribute) { 
     element = document.createElement('div'); 
     } 
     if (element.setAttribute && element.removeAttribute) { 
     element.setAttribute(eventName, ''); 
     isSupported = is(element[eventName], 'function'); 

       if (!is(element[eventName], 'undefined')) { 
      element[eventName] = undefined; 
     } 
     element.removeAttribute(eventName); 
     } 
    } 

    element = null; 
    return isSupported; 
    } 
    return isEventSupported; 
})(), 

爲什麼你會被自己實現這個Modernizr的時候會爲你在一個證明,快捷的方式?

+2

你可以在這裏通過所有的測試漫遊:https://github.com/Modernizr/Modernizr/tree/master/feature-detects – 2014-12-03 10:40:05

+0

謝謝我明白了! – 2014-12-04 02:53:27

相關問題