2011-11-03 5 views
1

예기치 않은 방식으로 작동하는 코드 조각이 있습니다. 코드가 더 많거나 적은 같은 외모, 그래서 내가 먼저 세부 사항을 넣어 보자 :IE (8/9)의 top.document.location.href 속성 동작

window.onunload = doUnload; 
var unLoadTimer; 
var gInvokeOnBeforeUnload = true; 
function setInvokeOnBeforeUnload() { gInvokeOnBeforeUnload = false; } 

function doUnload() { 
if(gInvokeOnBeforeUnload==true){ 
    setInvokeOnBeforeUnload(); 
    top.document.location.href = "LogOff"; 
    clearTimeout(unLoadTimer); 
} 
//Function Midpoint 
if (top.document.readyState != "complete" && gLogOffClick == false){ 
    unLoadTimer = setTimeout("doRealUnload("+func_call_count+")", 800); 
    //its just a timeout for the function to be called again 
} 
} 

나는 또한 로그인하지만 예에서 제외 작은 코드를 유지하기 위해 추가하는 방법. 내가 직면 한 문제는 top.document.location.href가 "LogOff"로 재 할당되지 않고 "LogIn"이라고 부르는 사이트에서 처음 시작한 페이지와 여전히 동일하다는 것입니다. window.onunload 이벤트를 트리거하려면 F5 키를 누르십시오 (항상 발생합니다). 그러나 로그 오프는 location.href에 지정되어 있지 않습니다. "// Function Midpoint"주석 마커에 간단한 alert(1);을 추가 한 경우에만 로그 오프가 발생하지만 (아래 apapche 로그에서 볼 수 있듯이) 위치 href는 여전히 "LogIn"과 동일합니다. 할당 된 값이 변경되는 즉시 변경해야한다고 잘못 생각합니까?

점의 두 가지 점을 이해하지 못했습니다. a) LOGHFF 값을 지정하자마자 location.href가 변경되지 않는 이유는 무엇입니까? 같이 location.href 즉시 발생해야 어떤 b)는 변경 C) 나는 브라우저를 열고

그나마 어떤 화려한 세션 추적 메커니즘, JS 위의와의 정직하고 HTML 페이지가 로그온 할 때 어떻게 LOCATION.HREF 초기화 않습니다 F5를 통해 @ onunload를 트리거했습니다.

내가 달성하기를 바라는 모든 것은 장면 뒤에서 일어나는 일과 경고가있는 경우 리디렉션이 일어나는 이유를 이해하는 것입니다 (1). inbetween 그리고 거기에 휴식이 없다면 나던.

With timeout: 
IP.IP.IP.IP - xxx [28/Oct/2011:10:38:50] "GET /LogOff HTTP/1.1" 200 208 
IP.IP.IP.IP - xxx [28/Oct/2011:10:38:50] "GET /LogIn HTTP/1.1" 401 540 
IP.IP.IP.IP - xxx [28/Oct/2011:10:38:52] "GET /LogIn HTTP/1.1" 200 2898 

Without timeout: 
IP.IP.IP.IP - xxx [28/Oct/2011:10:41:04] "GET /LogIn HTTP/1.1" 200 2726 

보기 위하여 어디에서 읽기/어떤 방향으로 어떤 도움이나 지침은 누군가가 배후에 어떤 일이 벌어지는 지 알아 정교한 수있는 더 나은 경우, 감사 : 내 경우 아파치는 다음과 같은 등록. IM은 JS 엔진에서 교육을 잘받지 못하고, 불행한 점도 두려워합니다. 코드는 정말 내 :( 당신은 추가 질문 메신저 청취가있는 경우, 어쩌면 내가 IE는 내가 필요로하는 유일한 포커스 그룹처럼

그냥 .. 다른 브라우저에서 테스트하려고 :)이 중요한 무언가를 생략 ...

입니다

답변

0

document.location.href은 페이지를 언로드 할 때 읽기 전용입니다. 따라서 사용자가 페이지를 떠날 때이 속성을 변경할 수 없습니다. 이것은 보안 기능입니다.

은 참조 : Changing window.location.href in Firefox in response to an onunload event

내가 당신 대신 당신은 jQuery를 사용하여 매우 간단 Ajax를 호출하여이 작업을 수행 할 수있는 사용자 등을 로그 아웃, 서버에 비동기 호출을 제안한다.

+0

감사합니다. 기사를 알려 드리겠습니다. 그리고 그것을 직접 코딩해야합니다, jquery 불행히도 옵션이 아닙니다 :) –

+0

괜찮습니다. 귀하의 문제와 관련하여 충분하다고 판단되는 경우 제 답변을 허용으로 표시하십시오 ...;) 해피 코딩! – Alex

+0

그래. 한 가지 다른 질문입니다. 어떤 사양에서이를 재확인 할 수 있었는지 알고 있습니까? MDN 아티클이 아니라 오히려 일부 W3C DOM 스펙? 그것이 그것을 원할 것 인 것에 따라 그것을 시험해 보았던 시도는 그렇게 운이 좋지 않았다. 또한 location.repalce를 사용할 때 리디렉션 될뿐만 아니라 onunload에서 onbeforeunload로 이동하지만 다시 잘못된 디자인 결정이 될 수 있습니다. –

관련 문제