Pergunta

Como você sabe fazer solicitações entre domínios XMLHTTP não é permitido por razões de segurança em Internet Explorer.

Eu tenho um controle WebBrowser e eu estou usando DocumentText vez de Navigate a um URL. Uma vez que o domínio atual é about:blank quando as tentativas de página para fazer um pedido para si mesmo ou outro domínio que estou recebendo Access is denied erro Javascript.

Mesmo quando eu uso Navigate se o Javascript fazer um pedido para outro domínio que não funciona.

Como posso resolver isso?

Este código HTML deve trabalhar com controle 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>
Foi útil?

Solução

Eu encontrei uma solução suja, carregar um HTML local (c: \ temp \ temp.html) e, em seguida, modificar o conteúdo do mesmo via javascript.

Após este ponto há restrições não mais crossdomain no entanto usando document.write causando outros problemas desagradáveis ??como funções .ready JQuery não vai funcionar.

Outras dicas

Verifique isso, ele trabalhou para mim como um encanto. http://support.microsoft.com/default.aspx? scid = kb; en-us; 246227

Eu não entendo em que domínio você não tem acesso ao Javascript ... Você já tentou usar o roteiro para obter os dados que você quer de um domínio diferente? Você pode usar o JSONP idioma para namespace os dados ...

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

E, em seguida, em "/ dados":

myFunction({
    // data here
});

URLACTION-cross-domain-DATA parece ser a direção certa: Leia este para descobrir por que

A única maneira de fazer isso é para garantir que seus código é executado na zona de confiança (ou higer como HTA). Por padrão, qualquer coisa rodando dentro das pistas controle WebBrowser na zona que os arquivos que estão sendo atendidas vêm. (Isto é, as políticas padrão de segurança do IE estão sendo usados.)

Para alterar esse comportamento, você precisa alterar o aplicativo que está hospedando o controle WebBrowser e implementar algumas interfaces de em que o controle WebBrowser. (IInternetHostSecurityManager, IInternetZoneManager e IInternetSecurityMgrSite são os que você deve dar uma olhada.) Esta não é uma tarefa trivial e a documentação sobre isso é escassa na melhor das hipóteses.

Uma vez feito isso, o código pode ser executado com os privilégios que você precisa, e solicitações entre domínios são tão fácil como redefinir Mime-Sweeper altas pontuações.

Espero que isso ajude.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top