2011-01-27 1 views
2

jQuery 스크립트에 간단한 리디렉션이 있습니다. 링크를 클릭하면 비동기 저장을 수행 한 다음 window.location.href를 통해 다음 페이지로 사용자를 보냅니다. 이 문제는 IE (놀랄 깜짝 놀람)에 문제가있는 것을 제외하고는 모든 브라우저에서 정상적으로 작동합니다.IE에서 jQuery window.location.href 문제가 발생했거나 null이거나 개체 오류가 아닙니다. Google지도가 될 수 있습니까?

홀수 무엇
E.location.protocol is null or not an object 

이 스크립트는 다른 페이지에 작동되는 스크립트를 실행하려고 할 때 IE에서 한 페이지에, 나는 다음과 같은 오류가 발생합니다. 내가 볼 수있는 유일한 점은 Google지도가 포함 된 페이지는 Google지도가 포함 된 반면 다른 페이지는 포함되지 않는다는 것입니다.

또한이 문제는 이후 버전의 jQuery (1.4+)에서만 발생하는 것으로 보이지만 다른 기능에는이 문제를 사용해야합니다.

제안 사항? 고맙습니다.

(페이지에서 앵커 태그에 '고토'속성에서 그 위치를 얻을 수있는) 스크립트를 리디렉션, 저장 :

$("#save_and_go_button").click(function(){ 
    showAction('Saving...');   
    $.ajax({ 
    type: "POST", 
    url: "/admin_and_tools/async/save.php", 
    data: $("#main_form").serialize(), 
    dataType: "html", 
    success: function(results){ 
    if(results == 'success'){ 
    hideAction(); 
    //alert('The record has been saved.'); 
    document.location.href = $("#save_and_go_button").attr('goto'); 
    }else{ 
    alert('failed' + results); 
    } 
    } 
    });   
}); 

편집 : 여기가 jQuery 코드에서에 수행하는 라인입니다 :

if(E.location.protocol!=="file:") 
    try{return new E.XMLHttpRequest}catch(a){}try{ 
return new E.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}; 
+0

단지 정보를 위해서, 당신은'document.location.href'에 접근하고 있습니다. (어쨌든, 어쨌든 작동해야합니다) – jAndy

+0

"document.location.href"는 "window.location.href"와 정확히 같지 않습니다 - document ... 읽기 전용으로되어 있지만 일부 브라우저는이를 존중하지 않습니다. –

답변

0

글쎄, 최대 작물 IE와 오래 된 문제는 .4 출처

/* 
* Create the request object; Microsoft failed to properly 
* implement the XMLHttpRequest in IE7 (can't request local files), 
* so we use the ActiveXObject when it is available 
* Additionally XMLHttpRequest can be disabled in IE7/IE8 so 
* we need a fallback. 
*/ 

if (window.ActiveXObject) { 
    jQuery.ajaxSettings.xhr = function() { 
     if (window.location.protocol !== "file:") { 
      try { 
       return new window.XMLHttpRequest(); 
      } catch(xhrError) {} 
     } 

     try { 
      return new window.ActiveXObject("Microsoft.XMLHTTP"); 
     } catch(activeError) {} 
    }; 
} 

이제는 작동하는 것 같습니다. 이제는 def가 document.location.href를 전혀 좋아하지 않지만 window.location.href 만 사용합니다. 그래서 나는 모른다. 이것은 아마 내 응용 프로그램의 다른 부분을 충돌 것입니다.

업데이트 될 것입니다. 업데이트 - 지금까지는 아주 좋습니다.

+1

여기로 연락하도록하겠습니다. 나는 멍청이다. 사실 몇 달 후 내가 마침내 발견 한 것은 내가 var 위치를 전역으로 재 선언하여 원본 위치 변수를 파괴한다는 스크립트를 가지고 있다는 것입니다. 그건 내 Google지도 초기화 스크립트에 있었고, 그래서 내가 어떻게 Google지도가 물건을 망쳐 것으로 생각. 이 오류를 찾는데 도움을 주신 JSLint에 감사드립니다. – dgig

1

대신

document.location.href = $("#save_and_go_button").attr('goto'); 

사용

window.location.href = $("#save_and_go_button").attr('goto'); 

제가 알고있는 것부터 document.location is read-only.

document.location

는 게코 있지만 브라우저는 당신이 잘 로 할당 할 수 있도록, 원래 읽기 전용 속성이었다. 브라우저 간 안전을 위해 대신 window.location을 사용하십시오.

+0

나는 그것이 효과가 있다고 말할 수 있었으면 좋겠지 만, 여전히 같은 오류가 발생합니다. 그것은 다음 줄에서 jQuery 1.4.4 내에서 죽는다 (나는 이것을 포함하도록 나의 질문을 편집 할 것이다) : if (E.location.protocol! == "file :") {return new E.XMLHttpRequest} catch (a) {} try {새로운 E.ActiveXObject ("Microsoft.XMLHTTP")} catch (b) {}}를 반환합니다. – dgig

1

변경 document.location.hrefwindow.location.href

에이 나는 일이 주위에 jQuery를 1.4에서이 드롭하는 것입니다으로 무슨 짓을했는지 때때로 :

+0

불행히도 여기에 같은 오류가 발생합니다.그것은 jQuery 소스에서 ActiveX 콘텐트를 다루는 (질문에 추가 된) 코드 라인에 있습니다. – dgig

관련 문제