2010-06-06 5 views
1

이제 파이어 폭스 확장 기능을 개발 중입니다. 메인 xul과 함께 js에 전역 배열을 정의 할 수 있습니까? 다른 xs와 다른 js에서 사용할 때 발견되지 않았기 때문에 Firefox 개발 문서를 검색했습니다. 일반적인 어레이가 다른 xul 파일을 가진 두 개의 js 파일 사이에서 전송 될 수 없다는 것을 알았습니다. js에서 xpcom mutablearray를 정의했습니다.xpcom 배열은 다른 xul 파일로 전송할 수 있습니까?

var eleList = Components.classes [ "@ mozilla.org/array;1"] .createInstance (Components.interfaces.nsIMutableArray);

하지만 다른 JS에서 사용하고 싶을 때 : 여전히 작동하지 않습니다. 이유가 무엇입니까? 고마워요!

답변

3

가변 배열을 만들 때도이 배열 객체에 대한 참조를 만드는 XUL 컨텍스트의 변수에 저장하는 것이 문제입니다. 다른 XUL에서 변수를 볼 수 없으므로 배열에 액세스 할 수 없습니다. 컨텍스트 중 하나에서

  • 은, 다른 컨텍스트에 대한 참조를 가져 :

    는 다른 컨텍스트 건너 개체에 액세스하는 몇 가지 솔루션이 있습니다. 예를 들어 메인 윈도우 (browser.xul 오버레이)에 변수가 정의되어 있으면 윈도우 관리자를 사용하여 메인 윈도우에 대한 참조를 가져 와서 사이드 바에서 가져올 수 있습니다. 이 할 간단하지 않지만 당신이

  • 당신은 글로벌 싱글을 만들 자바 스크립트 모듈을 사용 할 수처럼

  • 당신은 특별히 간단한 경우에, 당신의 자신의 XPCOM 객체를 생성 할 수 있습니다.

JavaScript 모듈 옵션을 고려해야합니다. 가장 쉽고 안정적인 방법입니다. 그것은 파이어 폭스 3.0에 도입 된 당신은 자세한 내용은 여기 XPCOM에게

확인을 만들 필요없이 단지 자바 스크립트를 사용하여 수행 할 수 있습니다

https://developer.mozilla.org/en/JavaScript_code_modules/Using_JavaScript_code_modules

업데이트 : 여기

가 몇 가지 주 윈도우에 대한 참조를 얻는 방법에 대한 자세한 내용은 browser.xul에 정의 된 변수를 확인하십시오.

myArray = [1, 2, 3]; 

그런 다음 사이드 바 XUL에서, 당신은 메인 윈도우에 대한 참조를 가져와 기준을 사용하여 변수에 액세스 할 수 있습니다 :

당신은 (주 창)에 browser.xul 오버레이에서 변수를 정의

var mainWindow = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor) 
        .getInterface(Components.interfaces.nsIWebNavigation) 
        .QueryInterface(Components.interfaces.nsIDocShellTreeItem) 
        .rootTreeItem 
        .QueryInterface(Components.interfaces.nsIInterfaceRequestor) 
        .getInterface(Components.interfaces.nsIDOMWindow); 

var value = mainWindow.myArray[0]; 

이러한 링크는 당신을위한 유용한 정보가있을 수 있습니다 :

https://developer.mozilla.org/en/Working_with_windows_in_chrome_code

https://developer.mozilla.org/en/Code_snippets/Tabbed_browser

+0

처음에 감사드립니다. "메인 윈도우 (browser.xul 오버레이)에 변수가 정의되어 있다면, 메인 윈도우에 대한 참조를 얻기 위해 윈도우 매니저를 사용하여 사이드 바에서 가져올 수 있습니다." 나는 그것을 분명히 알지 못했다.그리고 내 사건은 당신이 말한 것과 똑같이 : 메인 윈도우 (브라우저 xul 오버레이)의 js에서 swf 파일 경로를 관측하는 배열을 얻었고 사이드 바 js에서 그들을 얻고 싶습니다. 그래서 브라우저에서 변수를 정의했습니다 .xul? 어떻게해야하는지, 어떻게 사이드 바 js에서 그것을 얻는가? 다시 감사합니다. – jin

+0

응답에 좀 더 많은 정보를 추가했습니다. 희망이 도움이됩니다! – flpmor

+0

도움을 주셔서 감사합니다. 내 코드가 길기 때문에이 코드가 xul의 js를 추가한다고 생각합니까? – jin

관련 문제