我想使用 requirejs 在 firefox xul 插件中管理我的代码,但我无法让它找到我的模块。
我知道 xul 不能很好地处理 data-main
属性,所以我将 main.js 脚本作为第二个脚本:
<script src="chrome://myPackage/content/require.js" type="application/x-javascript"></script>
<script src="chrome://myPackage/content/main.js" type="application/x-javascript"></script>
这成功调用了脚本,并且 require 函数在 main.js 中可用,但是当我运行时
require(['lib1'], function(lib1){
alert(lib1.val1);
})
永远不会弹出警报(lib1 与 main.js 在同一目录中)。
我已经尝试过将 baseUrl 设置为
require.config({
baseUrl: "chrome://myPackage/content/"
})
这两种方式都行不通。
有谁知道如何让 require.js 在正确的位置查找我的模块?
附录 **
我添加了一个错误处理函数,返回的错误码是
http://requirejs.org/docs/errors.html#timeout
我已经成功地将测试模块加载到一个正常的网页中。这似乎证实了问题是路径配置(它在失败之前也需要 15 秒超时)
最佳答案
Firebug 似乎有一个可用的 requirejs 版本。但更重要的是,它们有一个更好的 mini-require.js
,在覆盖层中使用时不会污染共享的全局范围(如果使用正确:p)
- > https://github.com/firebug/firebug/blob/master/extension/modules/require.js
- > https://github.com/firebug/firebug/blob/master/extension/modules/mini-require.js
我建议您查看这些实现以及使用它的代码。
主动警告:
请注意,如果您的插件使用的代码通过定义全局函数或变量或在函数内隐式声明变量,在覆盖范围 (window
) 上定义了许多新属性,那么这可能会干扰与在同一范围内运行的其他代码(浏览器代码本身和其他附加组件)。此外,如果您想将附加组件提交到 addons.mozilla.org,那么如果您的附加组件“污染”了主叠加层中的全局范围/命名空间,审阅者可能不会将其授予公共(public)状态。
关于javascript - 在 firefox xul 扩展中使用 requirejs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18448811/