Frage

Wie Sie tun Cross Domain XMLHTTP Anfragen wissen, ist aus Sicherheitsgründen nicht unter Internet Explorer erlaubt.

Ich habe ein WebBrowser-Steuerelement und ich bin mit DocumentText statt Navigate zu einer URL. Da die aktuelle Domäne ist about:blank, wenn die Seite eine Anforderung an sich selbst oder anderen Domain zu tun versucht, ich bin immer Access is denied Javascript Fehler.

Auch wenn ich Navigate verwenden, wenn die Javascript eine Anforderung an eine andere Domäne tun es nicht funktioniert.

Wie kann ich dieses Problem umgehen?

Dieser HTML-Code sollte mit WebBrowser-Steuerelement arbeiten:

<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>
War es hilfreich?

Lösung

fand ich ein schmutziges Problem zu umgehen, lädt einen lokale HTML (c: \ temp \ temp.html) und dann den Inhalt den es über Javascript ändern.

Nach diesem Punkt gibt es keine mehr domänenübergreifende Einschränkungen jedoch mit document.write verursacht andere unangenehme Probleme wie JQuery .ready Funktionen werden nicht funktionieren.

Andere Tipps

Überprüfen Sie dies, ist es für mich wie ein Charme. http://support.microsoft.com/default.aspx? scid = kb; en-us; 246227

Ich verstehe nicht, auf der Domain, die Sie haben keinen Zugriff auf die Javascript ... Haben Sie versucht, die Skript mit Tag, um die Daten zu erhalten, die Sie aus einer anderen Domäne wollen? Sie können die JSONP Idiom die Daten zu Namespace ...

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

Und dann auf "/ data":

myFunction({
    // data here
});

UrlAction-cross-domain-DATA scheint die richtige Richtung zu sein: dies Lesen Sie, warum

Der einzige Weg, dies zu tun, ist Ihr Code ausgeführt wird in der vertrauenswürdigen Zone (oder higer wie HTA), um sicherzustellen. Standardmäßig läuft, alles innerhalb des WebBrowser-Steuerelement läuft in der Zone, die die Dateien, die kamen aus bedient werden. (Das heißt die Standard-IE-Sicherheitsrichtlinien verwendet werden.)

Um dieses Verhalten zu ändern, werden Sie die Anwendung ändern müssen, die das WebBrowser-Steuerelement hostet und implementieren einige Schnittstellen auf diesem WebBrowser-Steuerelement. (IInternetHostSecurityManager, IInternetZoneManager und IInternetSecurityMgrSite sind diejenigen, die Sie gesehen haben sollten.) Dies ist keine triviale Aufgabe und die Dokumentation darüber ist bestenfalls knapp.

Sobald dies geschehen ist, Ihr Code kann mit allen möglichen Privilegien laufen Sie brauchen, und Cross-Domain-Anfragen sind so einfach wie das Zurücksetzen Mimt-Sweeper hohe Werte.

Hope, das hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top