【问题标题】:Make Modernizr.load() add scripts to end of page使 Modernizr.load() 将脚本添加到页面末尾
【发布时间】:2012-05-03 17:19:07
【问题描述】:

我正在使用 Modernizr 来检查功能,即 csscolumns,并运行 Modernizr.load() 以便在此功能不可用时使用 css3-multi-column.js polyfill。这一切都很好,除了 Modernizr/yepnope 将脚本插入到 Modernizr 脚本元素之前以及我的样式表之前。由于 css3-multi-column.js 必须包含在所有样式表之后,如果 Modernizr 将脚本添加到页面末尾,我会更喜欢。这可能吗?

这是我的代码:

Modernizr.load({
    test: Modernizr.csscolumns,
    nope: 'http://host.org/js/libs/css3-multi-column.js';
});

如果可能的话,这就是我想用 Modernizr 实现的目标:

if (!Modernizr.csscolumns) {
    var script = document.createElement( 'script' );
    script.type = "text/javascript";
    script.src = 'http://host.org/js/libs/css3-multi-column.js';
    $('body').append(script);
}

【问题讨论】:

    标签: javascript modernizr yepnope polyfills


    【解决方案1】:

    我只是偶然发现了同样的问题,并查看了 Modernizr (yepnope.js) 代码,这绝对不可能在页面末尾添加脚本。

    所以,很遗憾,您的解决方案是好的。

    另一种可能的解决方案是把Modernizr放在页面底部(但是IE8会坏,见底部注释here)?

    另外,就我而言,我所有的样式表都在 Modernizr 插入的 css3-multi-column.js 脚本之前,但它也不起作用。但是使用您的方法可以解决问题。使用您的方法,它在附加到HEAD 时也有效。所以问题不在于插入脚本的地方,而是其他地方?

    【讨论】:

    • 感谢您的回答!我想我懒得看 yepnope 源。据我所知,Modernizr 应该在任何 js 或 css 之前加载,这可能就是为什么即使在样式表之后加载 yepnope.js + css3-multi-coluns.js 也无法工作的原因。无论如何,自从发布我的问题后,我就接受了 yepnope 不支持将脚本附加到页面末尾的事实。虽然我的替代代码确实可以正常工作,但我只是认为使用 yepnope 会是一个更清洁的解决方案。
    • 今天我尝试使用 Modernizr 加载 CSS,但我确信它是在 css3-multi-coluns.js 之前加载的,但没有成功。我还在 Modernizr 代码中添加了script.type="text/javascript",但没有取得多大成功。我看不出 Modernizr 中使用的方法和你的代码有什么区别?
    • 我同意,据我所知,Modernizr 所做的基本上是设置 src/href 和其他属性并将脚本和链接元素附加到文档中,即与我的解决方法几乎相同.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 2016-07-18
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    相关资源
    最近更新 更多