문제

인터넷 익스플로러에서는 크로스 도메인 XMLHTTP 요청을 수행하는 것이 보안상의 이유로 허용되지 않습니다.

웹 브라우저 컨트롤이 있고 사용 중입니다 DocumentText 대신에 Navigate URL에. 현재 도메인이기 때문에 about:blank 페이지가 자신이나 다른 도메인에 대한 요청을 시도 할 때 Access is denied 자바 스크립트 오류.

내가 사용하더라도 Navigate JavaScript가 다른 도메인에 요청하는 경우 작동하지 않습니다.

이 문제를 어떻게 해결할 수 있습니까?

이 HTML 코드는 WebBrowser Control과 함께 작동해야합니다.

<body>

<a href="javascript:getit('http://www.google.com')">this should work</a>
<div id="x"></div>

</body>

<script>
function XHConn()
{
  var xmlhttp, bComplete = false;
  try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); }
  catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }
  catch (e) { try { xmlhttp = new XMLHttpRequest(); }
  catch (e) { xmlhttp = false; }}}
  if (!xmlhttp) return null;
  this.connect = function(sURL, sMethod, sVars, fnDone)
  {
    if (!xmlhttp) return false;
    bComplete = false;
    sMethod = sMethod.toUpperCase();

    try {
      if (sMethod == "GET")
      {
        xmlhttp.open(sMethod, sURL+"?"+sVars, true);
        sVars = "";
      }
      else
      {
        xmlhttp.open(sMethod, sURL, true);
        xmlhttp.setRequestHeader("Method", "POST "+sURL+" HTTP/1.1");
        xmlhttp.setRequestHeader("Content-Type",
          "application/x-www-form-urlencoded");
      }
      xmlhttp.onreadystatechange = function(){
        if (xmlhttp.readyState == 4 && !bComplete)
        {
          bComplete = true;
          fnDone(xmlhttp);
        }};
      xmlhttp.send(sVars);
    }
    catch(z) { return false; }
    return true;
  };
  return this;
}

function getit(url){
    var xmlhttp = new XHConn();
    var fnWhenDone = function (oXML) { document.getElementById('x').innerHTML = oXML.responseText; alert(oXML.responseText); };
    xmlhttp.connect(url, "GET", "", fnWhenDone);
}

</script>
도움이 되었습니까?

해결책

더러운 해결 방법을 찾았고 로컬 html (c : temp temp.html)을로드 한 다음 JavaScript를 통해 그 내용을 수정합니다.

이 시점 후에는 jQuery와 같은 다른 불쾌한 문제를 일으키는 Document.write를 사용하는 Cross 도메인 제한이 더 이상 없습니다. .ready 기능은 작동하지 않습니다.

다른 팁

이것을 확인하십시오. 그것은 매력처럼 저를 위해 일했습니다.http://support.microsoft.com/default.aspx?scid=kb; en-us ;246227

JavaScript에 액세스 할 수없는 도메인을 이해하지 못합니다. 스크립트 다른 도메인에서 원하는 데이터를 얻기 위해 태그가 있습니까? 당신은 사용할 수 있습니다 JSONP 데이터를 네임 스페이스하는 관용구 ...

var head = document.getElementsByTagName("head")[0];
var script = document.createElement("script");
script.src = "anotherdomain.com/data?callback=myFunction";
head.appendChild(script);

그런 다음 "/data"에서 :

myFunction({
    // data here
});

URLACTION-CROSS-DOMAIN-DATA는 올바른 방향 인 것 같습니다.이유를 알아 보려면 이것을 읽으십시오

이를 수행하는 유일한 방법은 코드가 신뢰할 수있는 영역 (또는 HTA와 같은 Higer)에서 실행되도록하는 것입니다. 기본적으로 Webbrowser 컨트롤 내부에서 실행되는 모든 것이 제공되는 파일이 제공되는 영역에서 실행됩니다. (즉, 표준 IE 보안 정책이 사용되고 있습니다.)

이 동작을 변경하려면 Webbrowser 컨트롤을 호스팅하는 응용 프로그램을 변경하고 해당 웹 브라우저 컨트롤에서 몇 가지 인터페이스를 구현해야합니다. (iinternethostsecurityManager, iinternetzonEmanager 및 iinternetsecurityMgrsite는 당신이 살펴 봐야 할 것입니다.) 이것은 사소한 작업이 아니며 이것에 대한 문서는 기껏해야 부족합니다.

이 작업이 완료되면 필요한 모든 권한으로 코드가 실행될 수 있으며 크로스 도메인 요청은 Mime-Sweeper 높은 점수를 재설정하는 것만 큼 쉽습니다.

도움이 되었기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top