0

부트 스트랩 된 확장을 실험하면서 모듈 객체에 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 모듈에서 지속성 속성에 액세스 할 수 있어야하는 시간과 위치에 대해 자세히 설명해 주시겠습니까? 내가 아는 바로는

답변

2

documentation은 무엇과 방법에 대한 매우 간단합니다 공유

모듈을 가져 오는 각 범위는 해당 모듈에서 내 보낸 심볼 의 바이얼 값 복사본을받습니다. 기호의 값을 변경하면 은 다른 범위로 전파되지 않습니다 (객체의 속성은 이 참조로 조작되지만).

첨부 예제가 명확하다고 생각합니다.

아마도 getters/setters을 사용해야합니다.

+0

문서는 실제로 매우 간단합니다. 실제 시나리오에서는 이미 getter와 setter를 사용하고 있지만, 의도 한대로 작동하지는 않습니다. 나는 틀린 일을해야만합니다. 다시보고하기 전에 먼저 테스트를 좀 더 할 것입니다. 지금까지 고마워. – Codifier

+0

좋아요, 지금은 매우 간단한 테스트 케이스를 만들었습니다. (제 실제 사례는 제 질문보다 훨씬 복잡했습니다) 현재 예상대로 작동하고 있습니다. 알아야 할 다른 것이 있습니다 (아마 모듈의 객체를 인스턴스화하는 복잡한 방법과 관련이 있습니다). 고맙습니다. – Codifier

1

:

  • 다른 JSM 모듈
  • 브라우저 창
  • 내용 창
  • 부트 스트랩 애드온 범위
+0

그래서 내 무지를 용서하되, * include * or * exclude * 옵션을 사용하십시오.추가 기능 관리자에서 액세스 할 때 xul? (죄송 합니다만, 사용하고있는 명명법에 대해 아직 완전히 익숙하지 않습니다.) – Codifier

+0

다르게 표현하려면 : 내 예제 *가 의도 한대로 작동 할 수 있어야한다고 생각합니까? (하지만 뭔가를 간과 할 가능성이 있음) 또는 의도 한대로 작동하지 않을 것으로 예상되는 동작입니까? – Codifier

+0

오 options.xul은 owo 브라우저 창 컨텍스트입니다 :) 미안 할 필요가 없습니다. :) 그래서 그 창 밖에는 아무것도 액세스 할 수 없습니다. 그래서 각 options.js 및 bootstrap.js로 가져 오기 – Noitidart