2013-08-21 5 views
1

추가 기능 SDK를 사용하여 Firefox 확장 프로그램을 만들고 있습니다. 여러 가지 이유로 (주로 simple-prefs 모듈의 기능이 부족함) XUL 창을 생성하고 window/utils를 사용하여 포함시켜야했습니다. 이 창은 올바르게 표시되고 정확하게 수행해야합니다.Firefox XPCOM 및 추가 기능 SDK 통신

제 문제는 내 XUL 창에 포함 된 스크립트 파일에서 내 main.js에있는 함수를 호출해야한다는 것입니다. 같은 네임 스페이스에 존재하지 않으므로 내 기능에 액세스하는 방법을 모르겠습니다. 메시지 전달을 사용하게되어 기쁩니다. 그러나 XPCOM에 포함 된 스크립트에서는 port 기능을 사용할 수 있다고 생각하지 않습니다.

콜백 (callback)을 설정해야한다고 생각하지만, 어떻게해야할지 모르겠습니다.

- package.json 
- chrome.manifest (to allow me to open a XUL window) 
- lib 
    - main.js 
- chrome 
    - content 
     - window.xul 
     - script.js 
: 나는 내 자신의 XPCOM 컴포넌트를 만들기로 보았다하지만 내가 참고로 the XUL Migration Guide

에 따르면, 애드온 SDK와 함께 XPCOM 컴포넌트를 등록 할 수 있지 않다 보인다, 여기 내 (약칭 함) 폴더 구조

main.js의 일부 코드를 script.js의 일부 코드에서 호출하려고합니다. 창은 main.js에서 생성됩니다 (예 :

). 누구든지 아이디어가 있습니까?

편집 : 내가 함수를 호출 할 때 변경의 원인이 다음 main.js의 환경 변화를보고함으로써이 문제를 해결받을 수 있지만, 그 환경 설정 시스템의 거대한 남용 나를 친다. 하나 있다면 올바른 방법으로하고 싶습니다.

답변

1

나는 내 자신의 문제를 내가 행복하게 해결했다.

난과 같이, window.openDialogwindow.open의 위의 호출을 변경하고 인수로 내 콜백 함수에 전달 :

var { openDialog } = require('sdk/window/utils'); 
var window = openDialog({url: 'chrome://my-app-id/content/window.xul', 
    features: { 
     chrome: true, 
     centerscreen: true, 
     toolbar: true 
    }, 
    args: { 
     doStuff: function(){ 
      //Do all the stuff 
     } 
    } 
}); 

다음 script.js에, 나는 콜백이 호출 할 때, 나는

를 사용
window.arguments[0].doStuff();