Come eseguire la richiesta interdominio in un controllo Web browser?
-
03-07-2019 - |
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>
- Non ho il controllo del codice Javascript / HTML, la mia applicazione ospita solo un controllo web browser
- Ho trovato qualcosa chiamato CROSS_DOMAIN_DATA Azione URL Bandiere , non sono sicuro che sia la direzione giusta. Anche se non sono sicuro di come implementarlo.
- Inoltre, se puoi rispondere a questa domanda: Come impostare document.domain nel controllo WebBrowser per evitare & # 8220; Accesso negato & # 8221 ;? è abbastanza anche per me.
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.