我需要一种简单的方法来使用jquery检测CSS3媒体查询支持

我需要一种快速而肮脏的方法来使用jquery检测媒体查询支持。 我定义了一个函数如下:

function mediaQueriesEnabled () { var v = parseFloat($.browser.version); if ($.browser.msie) { if (v < 9) return (false); } return (true); } 

有人可以帮我解决这个问题吗? 看这个页面:

http://caniuse.com/css-mediaqueries

我意识到这里有一些复杂性。 例如,当我测试我的safari版本时,我得到“534.57.2”。 我现在想避免安装modernizr,主要是因为我处于紧张状态,我需要在短期内处理大多数情况。 任何帮助表示赞赏!

您可以使用媒体查询创建样式表,看看它是否有效。

在您的HTML中:

  

(或者你可以动态创建样式表,但这更难)

然后在你的脚本中:

 var d = document.createElement('div'); d.className = "mediatest"; document.body.appendChild(d); if( window.getComputedStyle && window.getComputedStyle(d).position == "absolute") { // supports media queries! } document.body.removeChild(d); 

编辑:我不再策划这个答案,因为我觉得Niet的好多了(见选择的答案)。 它应该仍然有效,但可能需要一些测试。

破解打开Modernizr (可以测试媒体查询),我们看到它使用window.matchMedia ( MDN页面 )function。 我们可以查看普通的旧vanilla JS来查看这个函数是否存在:

 function mediaQueriesEnabled () { if(typeof window.matchMedia != "undefined" || typeof window.msMatchMedia != "undefined") { return true; } else { return false; } } 

或者更优雅:

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

的jsfiddle

我已经在以下支持媒体查询的浏览器中进行了测试,所有这些都正确返回true:

  • Safari Mobile
  • Chrome 26

我在以下不支持媒体查询的浏览器中进行了测试,所有正确返回false:

  • IE 7

这是一些基于@Kolink答案的工作代码。 到目前为止,这段代码工作得很好……如果我有任何编辑,我会回发给这个post。

Javascript:

 var $globals = { mediaQuerySupport: false } function initMediaQueries () { // tests for media query support $globals.mediaQuerySupport = false; var d = document.createElement('div'); d.className = "mediatest"; // found in core.css document.body.appendChild(d); if( window.getComputedStyle && window.getComputedStyle(d).position == "absolute") { $mlGlobals.mediaQuerySupport = true; mlDebug ('browser has media query support'); } document.body.removeChild(d); } function mediaQueriesEnabled () { return ($globals.mediaQuerySupport); } $(document).ready(function() { initMediaQueries(); if (mediaQueriesEnabled()) { ... do something } }); 

CSS(我将其添加到我的主样式表文件中):

 @media all and (min-width:1px) { .mediatest {position:absolute} }