2012-09-25 2 views
2

내가IE 크로스 도메인 아약스 호출 XDomainRequest 오류

//The javascript code is in a page in my-domain 
//it tries to logout from the page in other-domain 
$(window).unload(function() 
{ 
    if ($.browser.msie && window.XDomainRequest) // IE 
    { 
     var xdr = new XDomainRequest(); 
     if (xdr) 
     { 
      xdr.onerror = function(){alert("XDR onerror");}; 
      xdr.ontimeout = function(){alert("XDR timeout");}; 
      xdr.onprogress = function(){alert("XDR onprogress");}; 
      xdr.onload  = function(){alert("XDR onload");}; 
      xdr.timeout  = 5000; 
      xdr.open("GET", 'http://other-domain/.../j_spring_security_logout'); 
      alert("before send"); 
      xdr.send(); 
      alert("after send"); 
     } 
     else 
      alert('Failed to create new XDR object.'); 
    } 
    else // firefox 
     $.getJSON('http://other-domain/.../j_spring_security_logout?callback=?', null); 

}); 

그러나, 나는이 순서대로 IE8에서 상자를 변경할 수 iframe에 페이지에서 로그 아웃하려면 다음 코드를 사용해야합니다 : "전에 보내" "XDR onerror", "after send".

I가 서버 측에 다음 코드

@Override 
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { 
    HttpServletResponse response = (HttpServletResponse) res; 
    response.setHeader("Access-Control-Allow-Origin", "*"); 
    response.setHeader("Access-Control-Allow-Methods", "GET,POST,OPTIONS"); 
    response.setHeader("Access-Control-Max-Age", "360"); 
    response.setHeader("Access-Control-Allow-Headers", "x-requested-with"); 
    chain.doFilter(req, res); 
} 

나는 $ .getJSON 및 response.setHeader ("액세스 제어 - 허용 - 원산지를"사용 후 로그 아웃이 파이어 폭스에 대해 완벽하게 작동하는지 확인할 수 있습니다, "*") 등등; 그러나 IE를 사용하면 로그 아웃하지 않습니다.

"For cross-domain, IE requires you to use XDomainRequest instead of XMLHttpRequest. 
jQuery doesn't do it so you have to do it manually:" 

그래서 내가 XDomainRequest를 추가 :

는 그럼 난이 댓글이 온라인을 발견했다. 그러나 IE8에서 "XDR onerror"라는 경고 대화 상자가 나타납니다. IE에서이 교차 도메인 호출을하려면 무엇을 추가해야합니까?

root = document.body; 

myIframe = document.createElement("iframe"); 
myframe.setAttribute("id", "myFrameId") 
myIframe.setAttribute("style", "position: absolute; top: -100px;"); 
//Making a xget 
myIframe.setAttribute("src", "http://other-domain.../j_spring_security_logout?callback=?"); 

root.appendChild(myframe); 

제거하려면 어떻게 :

답변

1

는 XDomainGet 요청하기 위해 iframe을 사용하려고 document.body.removeChild (document.getElementById를 ("myFrameId을")); 또는 root.removeChild (myFrame); IE8/9

관련 문제