Domanda

Come sapete, le richieste XMLHTTP tra domini non sono consentite per motivi di sicurezza in Internet Explorer.

Ho un controllo WebBrowser e sto usando DocumentText invece di Naviga su un URL. Poiché il dominio corrente è about: blank quando la pagina tenta di fare una richiesta a se stesso o ad altri domini, viene visualizzato Accesso negato Errore Javascript.

Anche quando uso Naviga se Javascript fa una richiesta a un altro dominio non funziona.

Come posso aggirare questo?

Questo codice HTML dovrebbe funzionare con il controllo WebBrowser:

<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>
È stato utile?

Soluzione

Ho trovato una soluzione sporca, ho caricato un HTML locale (c: \ temp \ temp.html) e poi ne ho modificato il contenuto tramite javascript.

Dopo questo punto non ci sono più restrizioni CrossDomain, tuttavia l'utilizzo di document.write che causa altri problemi spiacevoli come le funzioni JQuery .ready non funzionerà.

Altri suggerimenti

Dai un'occhiata, ha funzionato per me come un incantesimo. http://support.microsoft.com/default.aspx? SCID = kb; en-us; 246227

Non capisco su quale dominio non hai accesso a Javascript ... Hai provato a utilizzare il tag script per ottenere i dati desiderati da un dominio diverso? Puoi usare il linguaggio JSONP per spaziare i dati ...

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

E poi su " / data " ;:

myFunction({
    // data here
});

URLACTION-CROSS-DOMAIN-DATA sembra essere la giusta direzione: Leggi questo per scoprire perché

L'unico modo per farlo è assicurarsi che il codice venga eseguito nella zona attendibile (o higer come HTA). Per impostazione predefinita, qualsiasi cosa in esecuzione all'interno del controllo WebBrowser viene eseguita nella zona da cui provengono i file che vengono offerti. (ovvero vengono utilizzate le politiche di sicurezza IE standard.)

Per cambiare questo comportamento, dovrai cambiare l'applicazione che ospita il controllo WebBrowser e implementare alcune interfacce su quel controllo WebBrowser. (IInternetHostSecurityManager, IInternetZoneManager e IInternetSecurityMgrSite sono quelli che dovresti dare un'occhiata.) Questo non è un compito banale e la documentazione al riguardo è scarsa.

Una volta fatto questo, il tuo codice può essere eseguito con tutti i privilegi di cui hai bisogno e le richieste tra domini sono facili quanto ripristinare i punteggi più alti di Mime-Sweeper.

Spero che questo aiuti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top