尝试使用引导扩展,我试图通过在模块对象上设置一个baseUri
名为经理)。bootstrap.js
options.xul
我目前的理解是 JavaScript 代码模块一旦加载就会被持久化。但是,当我尝试从 访问baseUri
时options.xul
,它的值为undefined
。
安装.rdf:
<!-- just the relevant XML (this works as expected, by the way): -->
<em:optionsURL>chrome://test/content/options.xul</em:optionsURL>
/modules/Test.jsm:
var EXPORTED_SYMBOLS = [ 'Test' ];
Test = {
baseUri: undefined
}
/bootstrap.js:
// this is done in global scope,
// not inside install() or startup() for instance, if that matters
let test = Components.utils.import( 'file:///absolute/path/to/Test.jsm', {} ).Test;
test.baseUri = someBaseUriIExtracted;
/chrome/content/options.js(包含在 中/chrome/content/options.xul
):
let test = Components.utils.import( 'file:///absolute/path/to/Test.jsm', {} ).Test;
console.log( test.baseUri ); // undefined
因此,我想我未能完全理解的是,我应该能够从导出的 jsm 符号访问对象属性的确切范围和/或这些对象的确切保留方式和时间。
我的问题可能与沙盒有关吗?从附加组件管理器打开时, Firefox 是否认为options.xul
与 可能是不同的安全范围bootstrap.js
?
您能否全面了解 jsm 模块的实际范围以及我应该能够在何时何地访问 jsm 模块上的持久属性?