2012-07-06 3 views
2

jQuery에서 기본 응용 프로그램의 닫힌 탭을 감지하여 페이지를 새로 고칠 수있는 방법이 있습니까?기본 응용 프로그램의 닫힌 탭 감지

발매 시스템을 구축했습니다. 티켓을 클릭하면 target = "_ blank"를 사용하여 새 탭에서 티켓을 엽니 다. 티켓을 업데이트 할 때 (그리고 그렇게 할 때만) '탭 닫기'링크를 클릭하면 기본 앱 (이전 탭)에서이 이벤트를 인식하고 자동으로 페이지를 새로 고침하고 싶습니다.

window.open()을 사용하여 루프에서 닫힌 핸들을 감지 할 수 있다는 것을 알고 있지만 IE에서는 새 탭에서 열리지 않고 새 창을 열 때가 너무 비쌉니다. target = "_ blank"를 사용하면 IE에서 새 탭이 열리는 것을 볼 수 있습니다. 나는 탭을 선호한다.

+0

혜성처럼 역 아약스를 사용할 수 없습니까? – bhuvin

답변

0

그래서 우리는 부모 티켓 테이블 탭 및 하위 탭이 window.opener에 트리거 할 때 새로 고침을 결합 우리는 실제 티켓을 가지고 있습니다. 그러나 window.open() 이벤트 대신 target = "_ blank"클릭을 사용하기 때문에 실제로는 부모/자식 관계가 아닙니다.

수정은 일종의 고르지 만 작동합니다. 변경 사항은 "상위"탭에 추가하면됩니다. 첫째,과 같이 0으로 페이지에 자바 스크립트에 gbRefreshStale 글로벌 부울을 추가하고 그 값을 설정합니다

var gbRefreshStale = 0; 

둘째, 각 대상 = "_ 빈"클릭, 절편와 jQuery과 같이 :

$('A[target=_blank]').click(function(){ 
    setTimeout('gbRefreshStale=1;clearTimeout();',500); 
    return true; 
}); 

그런 다음, 세 번째, 당신은 페이지의 헤더이 mouseenter 이벤트가 필요합니다

$('#header').mouseenter(function(){ 
    // assuming you called your banner/header as #header 
    if (gbRefreshStale) { 
    gbRefreshStale = 0; 
    location.href = location.href; 
    } 
}); 

여기 효과는 새로운 탭이 티켓 오픈되어 있지만, 누군가가 해당 탭을 닫으면과 전달이다 마우스 acro 헤더 (그들은 단지 하위 탭을 닫은 이후 가능성이 높습니다)를 부모 탭이 새로 고칩니다. 이 기능은 여러 개의 탭을 열고 닫을 때 작동하며,이 시스템은 상위 탭이 루프에서 새로 고쳐지지 않게합니다. 다른 사람의 마우스가 해당 탭이 열리기 전에 상위의 #header 섹션을 넘을 수 있기 때문에 시간 초과가 필요합니다.

0

window.open을 사용하는 경우 window.opener 및 window.onbeforeunload를 사용할 수도 있습니다. 오직 단점은 당신이 탭을받지 않는다는 것입니다. 그런 식으로 루프가 필요 없습니다. 그래서 예를 들면

:

메인 화면 :

  • 클릭 이벤트 : window.open (/ */당신의 창 *을 엽니 다)

티켓 화면 :

  • 로드 이벤트 : onbeforeunload는
+0

맞아, 나는 이것에 대해서 알았지 만, 내가 언급 한 것처럼 그것은 탭을 사용하지 않았기 때문에 비능하고 바람직하지 않았다. 일관되게 탭으로 작업 한 것을 알고 싶습니다. – Volomike

관련 문제