Firefox扩展JSM和命名空间礼仪

时间:2011-04-30 16:37:59

标签: javascript firefox-addon jsm

因此,在Firefox扩展中,鼓励扩展程序的对象存在于com.contoso.myExtension等子对象中。这样你就没有在全局命名空间中放置任何对象,并且扩展通常不会相互影响。 (至少在常见的browser.xul窗口中)

但是从我对Javascript code modules (JSMs)的理解来看,虽然模块本身在一个单独的命名空间中工作,但它导出的符号最终会在任何代码的全局命名空间中导入它。此外,扩展不可能“好”并且只能尝试构建子对象;那些导出的符号只会破坏已经存在的全局变量。此外,您无法导出com.contoso.myExtension等符号。它只是一个简单的全局变量。

那么使用JSM时玩好的协议是什么?只做很长的变量名称并希望它们不会发生碰撞?

1 个答案:

答案 0 :(得分:3)

首先,我还没有看到一个真正的标准如何解决这个问题。但我们绝对可以比长变量名更好......

您对单独的命名空间中的Javascript代码模块是正确的(可以这么说),但是当您导入它们时,您不必将它们导入到全局命名空间中。如果查看Components.utils.import文档,您会看到可以导入到特定范围。也就是说,您根本不必污染全局命名空间

您可以将模块收集到myExtension命名空间。

var myExtension = {};
Components.utils.import("resource://.../module.jsm", myExtension);

将其包装在一个自执行函数中不会让任何变量泄漏到全局命名空间,甚至不会myExtension

(function(){
    var myExtension = {};
    Components.utils.import("resource://.../module.jsm", myExtension);
})();