source

IE의 jQuery 스크립트에 대한 액세스가 거부되었습니다.

nicesource 2023. 3. 5. 09:55
반응형

IE의 jQuery 스크립트에 대한 액세스가 거부되었습니다.

jQuery 1.4.2 스크립트를 사용한 iframe이 있습니다.양쪽 모두에 동일한 iframe이 주입됩니다.http그리고.httpsjQuery 스크립트는 메인 HTML 파일에 상대 경로로 포함되어 있습니다(예: /scripts/jquery-1.4.2.min.js).

AJAX 콜이 발신되면 Internet Explorer는 액세스를 거부합니다.AJAX가 다른 하위 도메인을 호출하고 있지만 올바른 프로토콜을 사용하고 있습니다.다른 브라우저는 모두 동작하지만 Internet Explorer는 다음 오류를 표시합니다.

SCRIPT5: 액세스가 거부되었습니다.
jquery-1.4.2.min.124, 행 127 문자 344

이 에러는 크로스 도메인 AJAX 콜에서 발생했다고 들었습니다.근데 왜 IE만 날 못살게 구는 거야?IE 솔루션이 있습니까?

그리고 이게 제 AJAX입니다.

 $.ajax({
     url: thisURL,
     dataType: "json",
     data: {cmd : 'getMessage', uurl: urlVar, t: Math.random()},
     success: function(ret){
         callback(ret)
     }
 });

IE에서는 크로스 사이트용으로 XHR 대신 XDomainRequest를 사용해야 합니다.다음과 같은 것을 시도해 보세요.

if ($.browser.msie && window.XDomainRequest) {
            // Use Microsoft XDR
            var xdr = new XDomainRequest();
            xdr.open("get", url);
            xdr.onload = function() {
                // XDomainRequest doesn't provide responseXml, so if you need it:
                var dom = new ActiveXObject("Microsoft.XMLDOM");
                dom.async = false;
                dom.loadXML(xdr.responseText);
            };
            xdr.send();
        } else {
            // your ajax request here
            $$.ajax({
                   url: thisURL,
                   dataType: "json",
                   data: {cmd : 'getMessage', uurl: urlVar, t: Math.random()},
                   success: function(ret){
                               callback(ret)
                    }
            });

        }

언급

http://forum.jquery.com/topic/cross-domain-ajax-and-ie

고객님의 시나리오에 적합한지 잘 모르겠습니다.

xdr = new XDomainRequest(); 
xdr.onload=function()
{
    alert(xdr.responseText);
}
xdr.open("GET", thisUrl); //thisURl ->your cross domain request URL 
//pass your data here
xdr.send([data]); 

여기서 더 많은 지침을 찾을 수 있습니다.

이것으로 저는 문제를 원만히 해결했습니다.

https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest

jQuery 이후와 스크립트 전에 설치/컴파일하고 $.ajax 메서드를 정상적으로 사용하면 나머지는 자동으로 처리됩니다.

최신 JQuery(> jquery-1.8.0)를 사용해 본 적이 있습니까?버전 1.8.0 이후 IE9의 버그를 몇 가지 해결했습니다.아마 이것도 그럴 거예요.

http://blog.jquery.com/2012/08/30/jquery-1-8-1-released/

저도 비슷한 문제가 있어서 해결방법은 json 대신 jsonp를 사용하는 것이었습니다.이렇게 하면 IE를 위한 고객 버전을 알아낼 필요가 없었습니다.

이 작업은 json 서버 호스트가 콜백 요청 변수를 지원하거나 서버에 액세스할 수 있고 지원을 추가할 수 있는 경우에만 수행할 수 있습니다.여기 그 과정을 이해하는데 도움이 된 페이지가 있습니다..net mvc는 초점을 맞췄지만 json과 jsonp의 차이를 잘 볼 수 있습니다.

http://blogorama.nerdworks.in/entry-EnablingJSONPcallsonASPNETMVC.aspx

액세스 중인 도메인을 확인합니다. 다음 응답 헤더가 있어야 합니다.

"Access-Control-Allow-Methods" : "POST, GET, OPTIONS"
"Access-Control-Allow-Origin"  : "http://www.mydomain.com" or "*"

다른 도메인이 스크립트 요청을 허용합니다.응답에 추가하는 헤더는 P3P 헤더입니다.

"p3p" : "CP=IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"

도움이 될 거야

나도 비슷한 문제에 직면해 있었다.파일 업로드 컨트롤을 사용하고 있었는데 숨겨져 있어서 파일 업로드와 파일 업로드 이벤트를 Ajax 방식으로 제어하려고 하는 다른 요소가 있었습니다.

파일 업로드 컨트롤을 직접 사용해 보십시오.이 문제를 해결했습니다.

이 버그(그리고 여기 구글)가 있습니다만, 그 이유는 매우 달랐습니다.따라서 교차 사이트가 없는데도 이 액세스 거부 오류가 표시되는 경우: 전송된 값을 다시 확인하십시오.
잘못된 다음 식을 사용하여 변수 중 하나에 영향을 준다고 가정합니다.

urlVar = $("theID").val // without () this was the error!

[...] 전화:

data: {cmd : 'getMessage', uurl: urlVar, t: Math.random()},

Google/FF 에서는 문제가 없습니다(수신 서버측을 확인해 주세요). 그러나 IE 에서는 송신을 거부합니다.

JQuery를 버전 1.10.1에서 1.10.2로 변경했는데 이 문제는 해결된 것 같습니다.

MS는 업계 권고안을 채택하기보다는 나름의 방식을 모색하고 있는 것으로 보인다.이치노
https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest/blob/master/jQuery.XDomainRequest.jshttpsgithub.com/MoonScript//blob/master/jQuery.XDomainRequest.js

다음과 같이 Ajax URL 요청에 'callback=?'을(를) 추가하십시오. http://wsvdmeer.blogspot.com.es/2012/08/bugfix-getjson-not-working-in-ie.html

언급URL : https://stackoverflow.com/questions/5087549/access-denied-to-jquery-script-on-ie

반응형