4

我正在尝试让 Enquire.js 为旧版浏览器工作。我正在使用文档中的深度支持方法:

Modernizr.load([
    {
        test: window.matchMedia,
        nope: "media.match.min.js"
    },

    "enquire-2.0.0.min.js",
    "plugins.js", // jquery plugins
    "main.js" // enquire-triggered functions + general code
]);

问题是我使用的是来自 initializr.com 的 Modernizr+Respond,所以测试总是通过。这会在 IE8/9 中的 enquire.js 中触发 JS 错误。

通过删除 respond.js 并仅使用普通的 Modernizr 测试失败,Media.match 加载,JS 错误得到解决。但是,我失去了 IE8 中的媒体查询支持。

让所有东西一起工作的最佳方法是什么?我曾尝试通过 Modernizr 同时加载 respond.js 和 Media.match。如果我先加载它,我会看到与以前相同的 JS 错误。如果我第二次加载它,媒体查询将不起作用。我也试过只加载 Media.match 的 INSTEAD,但 JS 错误返回。

谢谢。

编辑:

发布此消息后不久,我回滚查询 1.5.6,使用了 Respond.js、shouldDegrade 选项,并且没有进行 Modernizr 测试。IE8/9 中没有 JS 错误,到目前为止一切似乎都运行良好。

我仍然很想知道是否有办法让它与 2.0 一起使用,或者我现在是否应该坚持使用 1.5.6?

4

3 回答 3

4

我在使用 Inquire v2.0.2 时遇到了同样的问题。我的解决方法是从respond.js 中删除matchMedia 的包含,然后在加载respond.js 后加载media.match 和enquire.js。我还没有用 modernizr 测试过,但是我能够获得媒体查询支持和 enquire.js 在 IE7 和 8 中工作而没有 JS 错误。

于 2013-08-20T19:31:54.803 回答
1

我猜实际的问题是在 respond.js 中你确实有 matchMedia polyfill 但没有matchMedia.addListener 插件。因此,对普通 matchMedia 的modernizr 测试成功,但随后会导致您在查询时可能遇到的错误(对象不支持此属性或方法)。

我自己不希望自定义respond.js 不包含matchMedia,而是在respond.js 之后单独加载matchMedia.addListener 插件。

于 2014-02-12T12:52:40.993 回答
0

蒂姆,

有点晚了,但你看到了吗?我想这就是你要找的。

enquire.js 旧版支持

于 2013-06-04T01:35:37.140 回答