2009-05-22 3 views
0

내 파이어 폭스 2에서 팝업 창을 닫으면 :는 다음과 같은 흐름을 감안할 때 AJAX와 응답 핸들러

1) 링크에 사용자를 클릭하면 팝업 창을 엽니 다. 2) 사용자가 몇 가지 작업을 수행하고 버튼을 클릭하여 변경 사항을 저장합니다. 3) AJAX를 사용하여 일부 데이터가 게시됩니다. 4) AJAX 응답 핸들러에서 팝업 창이 닫히고 기본 창이 새로 고쳐집니다.

FireFox 2에는 응답 핸들러 내에서 팝업 닫기가 실패 할 때 (마우스 이동과 같은 일부 사용자 활동이 창에서 수행 될 때까지) 문제가 있습니다.

Sample code (popup window only): 

function ajax_cb() 
{ 
    window.close(); 
} 

// Send a POST request, ajax_cb will be called when readystate == 4. 
function test_ajax_close() 
{ 
    Request.sendPOST("file:///test.html", "", ajax_cb); 
} 

위 예제에서 창은 결국 닫히지 만 처음에는 사용자 상호 작용이 필요합니다. 이 link에 따르면 여전히 열려있는 소켓 비동기 AJAX 요청을하고있다 그리고 당신은 window.close을하려고하면

파이어 폭스 불행 얻는다().

답변

1

setTimeout(window.close, 100); 

이 소켓을 닫는, 자기 가까이에 poopup을 완료하는 데 충분한 시간이 될 shoould .. 짧은 시간 제한에 가까운 포장.

+0

예, 원래이 방법이 효과가 없다고 생각했지만 나중에 어제 시도해 보니 문제가 해결되었습니다. – jthompson

0

하나의 해결책은 외부에서 변수를 폴링하고 변경 될 때 창을 닫는 것입니다. 더 나은 솔루션을 찾고 있지만 샘플 코드는 다음과 같습니다.

var response_received = 0; 

function ajax_cb() 
{ 
    response_received = 1; 
} 

function monitor_response() 
{ 
    if (response_received) 
    { 
     self.close(); 
     return; 
    } 

    setTimeout("monitor_response()", 100); 
} 

function test_ajax_close() 
{ 
    Request.sendPOST("file:///test.html", "", ajax_cb); 
    monitor_response(); 
} 
0

일반 Windows를 사용하지 않습니다. div를 통해 iframe을 사용하여 창을 시뮬레이트하고 전체를 제어 할 수 있습니다.

관련 문제