【问题标题】:loading none AMD module before any other code in RequireJS?在RequireJS中的任何其他代码之前不加载任何AMD模块?
【发布时间】:2012-06-20 10:11:25
【问题描述】:

如何在加载任何其他模块之前加载非 AMD 模块?我有一个用于 console.x 的 shim,但在加载它之前遇到了问题。

我还希望仅在条件为真时加载它 - 所以在这种情况下,因为它是一个控制台 shim,我想测试一下 'console' 是否未定义,然后仅在条件为时加载控制台 shim真的。

请注意,我正在使用 RequireJS 并且手头也有 Modernizr。

谢谢。

【问题讨论】:

  • <script src="console-shim.js"></script> 然后<script src="require.js"></script>?
  • 谢谢,但我忘了添加额外的条件,见上文。有什么想法吗?
  • 是否必须仅按条件加载?你能不能总是加载 shim 并在 shim 代码中有一些 if ("undefined" === typeof window["console"]) { ... } 条件?
  • 是的,它是强制性的,我也在使用 requireJS,尝试使用来自 Modernizr 的 YepNope,但没有成功。

标签: javascript module requirejs amd


【解决方案1】:

这个演示展示了做你想做的事情的基本方法。

以下脚本:

http://jsfiddle.net/bZB9L/6/

<script>
if ("undefined" === typeof window["mozInnerScreenX"]) {
    document.writeln("<script src=http://jsbin.com/erevub/4></scr" + "ipt>");
}
</script>
<script>
alert(mozInnerScreenX);
</script>

从此脚本导入:

http://jsbin.com/erevub/4

window["mozInnerScreenX"] = window["mozInnerScreenX"] || (function () {
    return 999;
}());

我使用 mozInnerScreenX 作为 shim 属性,因为我机器上的所有浏览器都有 console

使用 document.writeln 的第一个脚本块必须位于与使用 shim 的以下脚本不同的脚本块中。

document.writeln 是一个坏主意的原因有很多,但我不知道你的完整用例,所以这是最简单的。

我在 IE 和 Chrome 上收到999 的警报(shim 值),在 Firefox 上收到1074.5 的警报(实际值)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-15
    • 2013-03-05
    • 1970-01-01
    • 2015-06-14
    • 2013-07-31
    • 1970-01-01
    • 1970-01-01
    • 2023-01-17
    相关资源
    最近更新 更多