부트 스트랩 된 확장을 실험하면서 모듈 객체에 baseUri
이라는 속성을 bootstrap.js
에서 설정하고 자바 스크립트에서 내 options.xul
(열어서 다시 읽음)의 jsm 모듈 범위 및/또는 지속성을 이해하려고합니다. 부가 기능 관리자).JavaScript 코드 모듈의 범위 및/또는 지속성은 무엇입니까?
JavaScript 코드 모듈은 일단로드되면 영구적으로 유지됩니다. 그러나 options.xul
에서 baseUri
에 액세스하려고 시도하면 그 값은 undefined
입니다.
install.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
, 나는 완전히 이해하기 위해 나는 정확한 범위가있는 I 액세스 할 수 있어야 무엇인지되어 실패하고있는 무슨 생각 내 보낸 jsm 심볼의 객체 등록 정보 및/또는 이러한 객체가 언제 어떻게 유지됩니까?
내 문제는 아마도 샌드 권투와 관련이 있습니까? Firefox는 을 추가 기능 관리자에서 열었을 때 bootstrap.js
과 다른 보안 범위로 간주합니까?
jsm 모듈의 실제 범위와 jsm 모듈에서 지속성 속성에 액세스 할 수 있어야하는 시간과 위치에 대해 자세히 설명해 주시겠습니까? 내가 아는 바로는
문서는 실제로 매우 간단합니다. 실제 시나리오에서는 이미 getter와 setter를 사용하고 있지만, 의도 한대로 작동하지는 않습니다. 나는 틀린 일을해야만합니다. 다시보고하기 전에 먼저 테스트를 좀 더 할 것입니다. 지금까지 고마워. – Codifier
좋아요, 지금은 매우 간단한 테스트 케이스를 만들었습니다. (제 실제 사례는 제 질문보다 훨씬 복잡했습니다) 현재 예상대로 작동하고 있습니다. 알아야 할 다른 것이 있습니다 (아마 모듈의 객체를 인스턴스화하는 복잡한 방법과 관련이 있습니다). 고맙습니다. – Codifier