17

我正在尝试使用 Modernizr 2 检测是否存在媒体查询,然后在适当的情况下加载 response.js。

我把它放在我的 script.js 文件中......

Modernizr.load({
  test: Modernizr.mq,
  yep : '',
  nope: 'mylibs/respond.js'
});

我究竟做错了什么?我真的很惊讶在 Modernizr 网站上没有一个如何使用媒体查询的示例。这是我正在使用的 Modernizr 版本...

http://www.modernizr.com/download/#-backgroundsize-borderradius-boxshadow-iepp-respond-mq-cssclasses-teststyles-testprop-testallprops-prefixes-domprefixes-load

4

2 回答 2

19

那是因为!!Modernizr.mq === true在任何时候……你都在测试错误的东西!

根据文档

如果浏览器根本不支持媒体查询(例如 oldIE),mq() 将始终返回 false。

但这:Modernizr.mq()false!你必须实际测试一些东西。在这里,all关键字正是您所需要的(或only all如保罗所建议的那样):

Modernizr.load({
  test: Modernizr.mq('only all'),
  nope: 'polyfill.js'
});

但是,Modernizr 2.0.x的所有自定义构建都mq包含了respond.js,所以你永远不需要测试这个,除非你想加载另一个 polyfill。在这种情况下,您需要从构建中禁用/删除 respond.js。

Modernizr 2.5.x

随着 Modernizr 2.5.x 的到来,上述情况不再正确。缩写的变更日志指定:

我们不再在构建器中包含 Respond.js,因为它在 IE8 中造成了崩溃冲突。如果您的项目中仍然需要 Respond.js,只需手动包含它。

这意味着现在Modernizr.mq('only all') 可能会返回false...

于 2011-09-28T09:15:09.693 回答
2

刚刚注意到在 Felix 的回答的评论中得出了这个结论 ——我把我的回答留在这里,以防它帮助像我一样没有得到它的其他访问者。

不确定这是否仍然是一个问题,但如果您正在加载 Modernizr v2.0.6,则不需要运行此测试。只需将其添加到您的页面应该会自动启动 respond.js 并且您的媒体查询应该开始工作。

自从我在 IE8 中不断返回“true”以来,我也一直在为此挠头!在 Modernizr 网站上解释得不好,但在http://html5boilerplate.com/中有所提及(一审)

于 2011-10-10T10:35:23.170 回答