, 당신의 이벤트가 발생하지 않습니다. 이로 인해 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()
을 사용하는 것이 일반적으로 바람직하지만, 속성을 사용하는 것이 합리적인 선택이 될 수 있습니다.입니다
당신이 열고있는 윈도우가 아니라 동일한 도메인 –
하지 않은 경우 당신이 할 수 있다고 생각하지 않습니다, 두 윈도우 모두 내 자신의 애드온으로부터 온 것인가? - 동일한 도메인이라는 뜻인가요? – bgmCoder
그냥 참고하시기 바랍니다 : 썬더 버드 옵션을 보지 않았지만 파이어 폭스에서 옵션 창에 지정된'features '는''chrome, titlebar, toolbar , 센터 스크린, 모달 ' '. – Makyen