Pregunta

Como sabe, las solicitudes XMLHTTP entre dominios no están permitidas por razones de seguridad en Internet Explorer.

Tengo un control WebBrowser y estoy usando DocumentText en lugar de Navigate a una URL. Dado que el dominio actual es about: blank cuando la página intenta hacerse una solicitud a sí mismo u otro dominio, obtengo Acceso denegado Error de Javascript.

Incluso cuando uso Navigate si el Javascript hace una solicitud a otro dominio, no funciona.

¿Cómo puedo evitar esto?

Este código HTML debería funcionar con el Control 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>
¿Fue útil?

Solución

Encontré una solución sucia, cargué un HTML local (c: \ temp \ temp.html) y luego modifiqué el contenido a través de javascript.

Después de este punto, no hay más restricciones de CrossDomain, sin embargo, el uso de document.write causa otros problemas desagradables como las funciones JQuery .ready no funcionarán.

Otros consejos

Comprueba esto, funcionó para mí como un amuleto. http://support.microsoft.com/default.aspx? scid = kb; en-us; 246227

No entiendo en qué dominio no tienes acceso a Javascript ... ¿Ha intentado usar la etiqueta script para obtener los datos que desea de un dominio diferente? Puede utilizar el idioma JSONP para nombrar los datos ...

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

Y luego en " / data " ;:

myFunction({
    // data here
});

URLACTION-CROSS-DOMAIN-DATA parece ser la dirección correcta: Lea esto para descubrir por qué

La única forma de hacer esto es asegurarse de que su código se ejecute en la zona de confianza (o en un lugar como HTA). De forma predeterminada, cualquier cosa que se ejecute dentro del control WebBrowser se ejecuta en la zona de la que proceden los archivos que se sirven. (es decir, se están utilizando las políticas de seguridad estándar de IE).

Para cambiar este comportamiento, deberá cambiar la aplicación que aloja el control WebBrowser e implementar algunas interfaces en ese control WebBrowser. (Debería echar un vistazo a IInternetHostSecurityManager, IInternetZoneManager y IInternetSecurityMgrSite). Esta no es una tarea trivial y la documentación sobre esto es, en el mejor de los casos, escasa.

Una vez hecho esto, tu código puede ejecutarse con cualquier privilegio que necesites, y las solicitudes entre dominios son tan fáciles como restablecer las puntuaciones altas de Mime-Sweeper.

Espero que esto ayude.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top