Question

Comme vous le savez, les requêtes XMLHTTP entre domaines ne sont pas autorisées pour des raisons de sécurité sous Internet Explorer.

J'ai un contrôle WebBrowser et j'utilise DocumentText au lieu de Naviguer vers une URL. Étant donné que le domaine actuel est sur: blanc lorsque la page tente de se faire une demande à lui-même ou à un autre domaine, je reçois L'accès est refusé Erreur Javascript.

Même lorsque j'utilise Naviguer si le code JavaScript ne demande pas à un autre domaine, il ne fonctionne pas.

Comment puis-je contourner cela?

Ce code HTML doit fonctionner avec le contrôle 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>
Était-ce utile?

La solution

J'ai trouvé une solution de contournement, chargez un code HTML local (c: \ temp \ temp.html) puis modifiez-en le contenu via javascript.

Après ce moment, il n'y aura plus de restriction CrossDomain, cependant, utiliser document.write, ce qui causera d'autres problèmes désagréables, tels que les fonctions JQuery .ready , ne fonctionnera pas.

Autres conseils

Cochez cette case, cela a fonctionné pour moi comme un charme. http://support.microsoft.com/default.aspx? scid = kb; en-us; 246227

Je ne comprends pas sur quel domaine vous n'avez pas accès au Javascript ... Avez-vous essayé d'utiliser la balise script pour obtenir les données souhaitées d'un autre domaine? Vous pouvez utiliser l'orthographe JSONP pour créer un espace de noms des données ...

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

Et ensuite sur "/ data":

myFunction({
    // data here
});

URLACTION-CROSS-DOMAIN-DATA semble être la bonne direction: Lisez ceci pour savoir pourquoi

La seule façon de le faire est de vous assurer que votre code est exécuté dans la zone de confiance (ou plus semblable à HTA). Par défaut, tout ce qui est exécuté dans le contrôle WebBrowser s'exécute dans la zone d'où proviennent les fichiers servis. (c’est-à-dire que les stratégies de sécurité IE standard sont utilisées).

Pour modifier ce comportement, vous devez modifier l'application qui héberge le contrôle WebBrowser et implémenter quelques interfaces sur ce contrôle WebBrowser. (IInternetHostSecurityManager, IInternetZoneManager et IInternetSecurityMgrSite sont ceux que vous devriez jeter un coup d'œil.) Ce n'est pas une tâche triviale et la documentation à ce sujet est au mieux rare.

Une fois que cela est fait, votre code peut être exécuté avec tous les privilèges dont vous avez besoin et les requêtes entre domaines sont aussi simples que de réinitialiser les meilleurs scores de Mime-Sweeper.

J'espère que cela vous aidera.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top