我正在尝试使用 Modernizr 2 检测是否存在媒体查询,然后在适当的情况下加载 response.js。
我把它放在我的 script.js 文件中......
Modernizr.load({
test: Modernizr.mq,
yep : '',
nope: 'mylibs/respond.js'
});
我究竟做错了什么?我真的很惊讶在 Modernizr 网站上没有一个如何使用媒体查询的示例。这是我正在使用的 Modernizr 版本...
我正在尝试使用 Modernizr 2 检测是否存在媒体查询,然后在适当的情况下加载 response.js。
我把它放在我的 script.js 文件中......
Modernizr.load({
test: Modernizr.mq,
yep : '',
nope: 'mylibs/respond.js'
});
我究竟做错了什么?我真的很惊讶在 Modernizr 网站上没有一个如何使用媒体查询的示例。这是我正在使用的 Modernizr 版本...
那是因为!!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 的到来,上述情况不再正确。缩写的变更日志指定:
我们不再在构建器中包含 Respond.js,因为它在 IE8 中造成了崩溃冲突。如果您的项目中仍然需要 Respond.js,只需手动包含它。
这意味着现在Modernizr.mq('only all')
可能会返回false
...
刚刚注意到在 Felix 的回答的评论中得出了这个结论 ——我把我的回答留在这里,以防它帮助像我一样没有得到它的其他访问者。
不确定这是否仍然是一个问题,但如果您正在加载 Modernizr v2.0.6,则不需要运行此测试。只需将其添加到您的页面应该会自动启动 respond.js 并且您的媒体查询应该开始工作。
自从我在 IE8 中不断返回“true”以来,我也一直在为此挠头!在 Modernizr 网站上解释得不好,但在http://html5boilerplate.com/中有所提及(一审)