IInternetSecurityManager URLACTION_CROSS_DOMAIN_DATA und asynchrones Pluggable-Protokoll für domänenübergreifende XMLHTTP-Anfragen in der Webbrowser-Steuerung

8

Ich habe ein asynchrones Pluggable-Protokoll in einer .net 2.0-Anwendung mit C # implementiert, das auf dem lokalen Rechner gespeicherte HTML-Dateien in einen MemoryStream lädt.

Wenn ich die HTML-Dateien normalerweise im Webbrowser-Steuerelement unter Verwendung ihrer lokalen Dateipfade lade, funktioniert xmlhttprequest einwandfrei, aber das Laden der Dateien über das Protokoll und ein Versuch, xmlhttprequest zu verwenden, gibt einen Zugriff verweigert Fehler zurück.

Ich nehme an, dass dieses Verhalten darauf zurückzuführen ist, dass das Webbrowser-Steuerelement nicht mehr weiß, dass die HTML-Dateien auf dem lokalen Computer gespeichert sind, und sie in eine nicht vertrauenswürdige Internetzone lädt.

Obwohl ich S_OK für URLACTION_CROSS_DOMAIN_DATA innerhalb der ProcessUrlAction von IInternetSecurityManager zurücksende, die ich mit einem Unterbrechungspunkt überprüft habe, um sicherzustellen, dass sie ausgelöst wurde, wird der Rückgabewert meines IInternetSecurityManager für diese Aktion ignoriert.

Ich habe versucht, pdwZone in MapUrlToZone von IInternetSecurityManager für meine Protokoll-URLs auf tagURLZONE.URLZONE_LOCAL_MACHINE zu setzen und ein bisschen mit GetSecurityId herumzuspielen, obwohl ich nicht genau weiß, was ich mache und andere Dinge wie das Laden von Skripten etc ... scheint nichts zu funktionieren, um domainübergreifendes xmlhttprequest zu erlauben.

Jeder eine Idee, wie ich das zur Arbeit bringen kann.

    
John Earnshaw 17.03.2014, 21:06
quelle

2 Antworten

4

Nicht wirklich eine Antwort, aber es kann helfen, das Problem zu isolieren. Ich würde zuerst diesen APP-Handler in C ++ implementieren und ihn mit einem robusten, nicht verwalteten WebBrowser-ActiveX-Host-Beispiel wie dem Webformular von Liican Wishick testen:

Ссылка

Wenn ich es mit dem nicht verwalteten Host zuverlässig arbeiten lassen könnte, würde ich mit der C # -Implementierung fortfahren.

Ich würde auch versuchen, FEATURE_BROWSER_EMULATION to 8000 oder weniger, um die Emulation des älteren IE-Verhaltens zu erzwingen, nur um zu überprüfen, ob es so funktioniert.

Das heißt, ich würde meine Hoffnungen nicht hoch halten. Ich habe meinen Anteil an der WebBrowser / MSHTML-Integration erledigt die Vergangenheit, und ich habe das Gefühl, dass die APP-Unterstützung seit IE9 nicht regressionsgeprüft wurde, sondern für neue IE-Inhalte, die offene Web-Standards umfassen sollen.

Aktualisiert , MSDN erwähnt vage das :

  

Nach erfolgreichem Abschluss enthält pbSecurityId das Schema, die Domäne,   und Zoneninformationen, sowie ob die angegebene pwszUrl war   abgeleitet von einer Marke des Webs.

Hier ist das Format, das vor langer Zeit für mich funktionierte (vielleicht schon lange bevor "Mark of the Web" wurde eingeführt:

%Vor%

Ich glaube, 2 steht hier für die Zone "Vertrauenswürdige Sites". Andere Zonen finden Sie hier:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Lockdown_Zones

Hoffe, das hilft.

    
Noseratio 05.06.2014 23:28
quelle
1

Vielleicht irre ich mich aber, haben Sie versucht, Ihre Protokoll-Header Access-Control-Allow-Origin: * ?

zu senden     
ZeroWorks 09.06.2014 18:20
quelle