2016-10-11 16 views
0

제 addon에는 xul 옵션 패널을 열면 내 addon에 대한 메뉴 명령이 있습니다. xul 창에는 자체 javascript가 없습니다.윈도우에 이벤트 리스너를 추가하는 방법

그러나 주 스크립트가 패널을 열면 사용자가 해당 창에서 Okay를 클릭하고 데이터가 제출 될 때 주 스크립트가 어떻게 알 수 있습니까? 옵션 창에서 설정 한 환경 설정을 확인할 수 있도록 제출 이벤트가 언제 발생하는지 알고 싶습니다.

기본적으로 창을 제출할 때 함수를 실행하고 싶지만 기본 추가 스크립트에서 모든 작업을 수행하려고합니다.

여기가 지금 있습니다. 그것은 현재대로 windowFeatures string'modal'을 통과하기 때문에

function OpenPrefsPanel(){ 
    var prefpanel = window.openDialog("chrome://myaddon/content/options.xul", "", "centerscreen,chrome,modal"); 
    prefpanel.addEventListener("submit", function(e){ doSomething(); },false); 
}, 
+1

당신이 열고있는 윈도우가 아니라 동일한 도메인 –

+0

하지 않은 경우 당신이 할 수 있다고 생각하지 않습니다, 두 윈도우 모두 내 자신의 애드온으로부터 온 것인가? - 동일한 도메인이라는 뜻인가요? – bgmCoder

+0

그냥 참고하시기 바랍니다 : 썬더 버드 옵션을 보지 않았지만 파이어 폭스에서 옵션 창에 지정된'features '는''chrome, titlebar, toolbar , 센터 스크린, 모달 ' '. – Makyen

답변

0

, 당신의 이벤트가 발생하지 않습니다. 이로 인해 window.openDialog() 모달 및 블로킹 (동기식)이 실행됩니다. 따라서 window.openDialog() 다음의 첫 번째 줄은 사용자가 "확인"또는 "취소"를 클릭 한 후에 만 ​​실행됩니다. 결과적으로 창이 닫히거나 닫힌 후에 prefpanel.addEventListener()이 실행됩니다. The MDN documentation says :

openDialog()에 대한 호출은 즉시 반환됩니다. 사용자가 대화 상자를 닫을 때까지 호출을 차단하려면 모달을 windowFeatures 매개 변수로 제공하십시오. 이것은 또한 사용자가 모달 대화 상자를 닫을 때까지 사용자가 오프너 창과 상호 작용할 수 없다는 것을 의미합니다.

당신은 그것을 모달되지 않도록 당신이 대화 상자를 열 방법을 변경하도록 선택할 수 있습니다

:

이 경우
var prefpanel = window.openDialog("chrome://myaddon/content/options.xul", "" 
            , "centerscreen,chrome"); 

, 당신이 중 하나를 얻으려면 다음 사용할 수있는 unload, dialogaccept, 또는 dialogcancel (파이어 폭스 51.0a2에서 테스트) 이벤트 :

var prefpanel = window.openDialog("chrome://myaddon/content/options.xul", "" 
            , "centerscreen,chrome"); 
prefpanel.addEventListener('load',optionsLoaded,true); 
function optionsLoaded(){ 
    console.log('Options Window Loaded'); 
    //unload also fires prior to the load event, so add listener here in load handler: 
    prefpanel.addEventListener('unload',optionsUnload,true); 
    prefpanel.addEventListener('dialogaccept',dialogAccept,true); 
    prefpanel.addEventListener('dialogcancel',dialogCancel,true); 
} 
function optionsUnload(){ 
    console.log('Options Window UNLOAD'); 
} 
function dialogAccept(){ 
    console.log('Options Window dialogAccept'); 
} 
function dialogCancel(){ 
    console.log('Options Window dialogCancel'); 
} 

참고 : 적어도 파이어 폭스에서 옵션 대화 상자는 일반적으로 열려있는 windowFeatures 다음 : 'chrome,titlebar,toolbar,centerscreen,modal'.

그러나 옵션 대화 상자가 부가 기능 관리자에서 열리면 옵션이 변경되었다는 알림을받을 수있는 몇 가지 추가 방법을 구현해야합니다. preference observer 일 수도 있고 옵션 xx에 소량의 JavaScript가 포함되어있을 수도 있습니다. 예를 들어, <prefwindow> 요소는 사용자가 "OK"(ondialogaccept) 또는 "취소"(ondialogcancel)를 클릭 할 때 실행되는 코드를 추가하는 데 사용할 수있는 attributes을 가지고 있습니다. options.xul 파일. addEventListener()을 사용하는 것이 일반적으로 바람직하지만, 속성을 사용하는 것이 합리적인 선택이 될 수 있습니다.입니다