2012-08-04 55 views

回答

12

破解開Modernizr(可測試媒體查詢),我們可以看到它使用了window.matchMediaMDN page)功能。我們可以在普通的舊香草JS檢查,看看是否函數存在(Modernizr的是真的真棒,但有時你只是想一塊磚,不是房子):

function mediaQueriesSupported() 
{ 
    if(typeof window.matchMedia != "undefined" || typeof window.msMatchMedia != "undefined") 
    { 
     // alert("media queries are supported!"); 
     return true; 
    }else{ 
     // alert("no media query support :("); 
     return false; 
    } 
} 

或者更優雅:

function mediaQueriesSupported() 
{ 
    return (typeof window.matchMedia != "undefined" || typeof window.msMatchMedia != "undefined"); 
} 

JSFiddle

我已經在支持媒體查詢以下瀏覽器進行測試,所有正確返回真:

  • 的Safari移動
  • 鉻26

我已經不支持媒體查詢以下瀏覽器進行測試,全部正常返回false:

  • IE 7

至於梯度支持檢測,有一些很好的答案herehere。事實上,您只需設置屬性並進行測試即可。瀏覽器會拋出垃圾或不支持的CSS屬性。

編輯:

Niet的擁有here一個很好的回答這個問題,類似於我的梯度檢測的建議。這不是純粹的Javascript(它需要非常少量的CSS),但它是一個絕對的傻瓜式的方法。

+6

對於「有時你只是想要磚塊而不是房子」而言+1 +1 – 2013-08-07 12:55:42

+4

IE9支持CSS媒體查詢,但沒有'matchMedia' JavaScript方法。 – Etienne 2013-10-29 16:15:52

+0

@Etienne我編輯了我的答案以涵蓋IE9。但我實際上沒有準備測試9的電腦,所以它可能無法正常工作。這個改變使我的代碼更接近Modernizr的'mq'函數(在試圖運行它之前檢查瀏覽器是否支持特定的媒體查詢)。我的JSFiddle也會更新,如果有人想嘗試它(比較,[這裏是舊的JSFiddle](http:// jsfiddle。net/3vbNb /)) – 2013-11-11 18:05:43