2012-06-28 2 views
0

일부 삭제 프로세스가 완료되면 열리는 내 애드온 대화 상자가 있습니다. I는 다음과 같습니다 이러한 모든 메시지 XUL 대화 상자 사용 : 그것은이"닫기"버튼을 누르면 XUL 대화 상자가 닫히지 않습니다.

<?xml version="1.0"?> 
<?xml-stylesheet href="chrome://myaddon/skin/Style.css" type="text/css"?> 
<!DOCTYPE overlay SYSTEM "chrome://myaddon/locale/mydtd.dtd"> 

<dialog xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" 
     class="dialog" ondialogcancel="return true;"> 
    <dialogheader id="dlgHdr"/> 
    <vbox flex="1" id="content" pack="center"> 
    </vbox> 
    <script 
     type="application/x-javascript" 
     src="chrome://myaddon/content/mainScript.js" 
    /> 
    <script 
     type="application/x-javascript" 
     src="chrome://myaddon/content/dialogInit.js" 
    /> 
    <tfs_string id="new-profile-success" value="&newProfileSuccess.Text;" 
       style="overflow: hidden" /> 
    <tfs_string id="delete-profile-success" value="&deleteProfileSuccess.Text;" 
       style="overflow: hidden" /> 
</dialog> 

핸들러가 true를 돌려 ondialogcancel, 버튼을 취소 할 수 있습니다. 그러나 버튼을 누르면 바로 닫히지 않습니다. 이 대화 상자를 드래그하여 사라지게해야합니다. 또한이 문제는 addon을 다시 설치 한 후 브라우저를 다시 시작할 때만 발생합니다. 다시 한 번 대화 상자가 닫히면 Cancel을 누른다. 이 대화 상자를 다른 메시지에 사용하고 그런 문제가 없습니다.

팝업을 사용하여 다시 시작하는 대신 Chromebug 디버거를 사용하여 창을 닫은 다음 다시 열면이 버그를 재현 할 수 없습니다. 하지만 다른 FF 버전을 시작한 다음 디버거를 사용하여 첫 번째 버전을 다시 작성하면 다시 제작할 수 있습니다. 하지만 dialogcancel 핸들러에서 단계별 실행을 사용하면 디버거에서 window.close()가 실행 된 후 Chromebug의 인터페이스가 응답하지 않고 (스크립트 내용 영역 제외) 대화 상자가 닫히지 않아 대화 상자를 드래그해야합니다. 창문을 조금 더 벌리면 사라집니다. 어떻게해야합니까?

+0

이 스크립트를 제거하면 어떻게됩니까? 여기에있는 대화 상자는 제대로 작동해야하며 (확장 기능이 설치되었을 때 어떤 의존성도 가지고 있지는 않습니다.) 문제가 'mainScript.js'또는 'dialogInit.js'에있을 가능성이 큽니다. –

+0

다른 대화 상자 사용에는 문제가 없습니다 (예 : 새 프로필 성공 초기화 도구는 모두 메시지 문자열에 대해 다른 매개 변수를 사용합니다). 그리고이 삭제 프로세스 완료 대화 상자는 브라우저를 다시 시작한 후에 제대로 작동합니다 (따라서 addon을 업데이트 한 후 두 번 다시 시작됩니다). –

답변

1

나는 마침내 그 이유를 발견했다. 문제는 실제로 dialogInit.js 스크립트로 인해 발생했습니다.

window.addEventListener('load', function() { myext.simpleDialogInitialize(); }, false); 
window.addEventListener("MozAfterPaint", function() { window.sizeToContent(); }, false); 
window.addEventListener('unload', function() { myext.simpleDialogFinalize(); }, false); 

'로드'및 '언로드'이벤트를 처리하는 짝수 핸들러가 포함되어 있습니다. 첫 번째 메서드는이 윈도우를 여는 메서드에서 지정된 이니셜 라이저를 호출합니다. 하지만 window.sizeToContent라는 'MozAfterPaint'이벤트에 대한 핸들러가 하나 더있어 무한 루프가 발생했습니다. Extension은 처음부터 생성되지 않았으므로이 실수를 한동안인지하지 못했습니다. 그 initializer를 호출 한 후 'load'이벤트 핸들러로 크기 조정을 옮겼습니다.

관련 문제