2

Iframe のページからログアウトするには、次のコードを使用する必要があります

//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 では、「送信前」、「XDR onerror」、「送信後」の順序で変更ボックスが表示されます。

サーバー側に次のコードがあります

@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("Access-Control-Allow-Origin", "*") などを使用した後、ログアウトが Firefox で完全に機能することを確認できます。ただし、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 でこのクロス ドメイン呼び出しを行うには、何を追加すればよいですか?

4

2 に答える 2

1

try to use iframe to make a XDomainGet request:

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);

To remove do: document.body.removeChild( document.getElementById("myFrameId") ); or root.removeChild(myFrame);

于 2012-09-25T17:41:57.330 に答える
0

IE8/9 のCORSリクエストは、jQuery プラグインjquery-transport-xdrで有効にできます

于 2015-10-06T20:22:11.887 に答える