2009-10-29 4 views

Antwort

67

Für die Zukunft, verfügen über voll CORS Erkennung wie folgt aussehen sollte:

//Detect browser support for CORS 
if ('withCredentials' in new XMLHttpRequest()) { 
    /* supports cross-domain requests */ 
    document.write("CORS supported (XHR)"); 
} 
else if(typeof XDomainRequest !== "undefined"){ 
    //Use IE-specific "CORS" code with XDR 
    document.write("CORS supported (XDR)"); 
}else{ 
    //Time to retreat with a fallback or polyfill 
    document.write("No CORS Support!"); 
} 

Sie können try this test live using JSBin und sehen Sie die richtige Antwort in IE, Firefox, Chrome, Safari und Opera.

Es gibt einige Randfälle in Nicht-Browser-Umgebungen, die unterstützen Cross-Domain-XHR, aber nicht XHR2/CORS. Dieser Test berücksichtigt diese Situationen nicht.

+9

Sie sollten erwähnen, dass XDomainRequest nur GET- und POST-Anfragen unterstützt. Wenn der Server ebenfalls auf PUT oder DELETE angewiesen ist, schlägt XDomainRequest fehl. – McFarlane

+2

XDR unterstützt auch keine Domain-übergreifenden Anfragen von "http" zu "https". Siehe [XDomainRequest - Einschränkungen, Einschränkungen und Problemumgehungen] (http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitation-and-workarounds.aspx) – Boaz

+3

Hinweis, ie11 gibt falsche Positive, da CORS nicht mit zwischengespeicherten Bildern unterstützt wird http://web.onassar.com/blog/2013/11/07/internet-explorer-11-and-cors-crossorigin-support/ – jedierikb

34

Nach http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/ sollten Sie in der Lage zu verwenden:

if ('withCredentials' in new XMLHttpRequest()) { 
    /* supports cross-domain requests */ 
} 

(Anmerkung: es ist ein Kommentar auf dieser Seite, die Chrome 2 diesen Test nicht besteht [obwohl es Cross-Domain-Anfragen jedoch zwingend nötig] I getestet. Chrome 3 und der Test wird jetzt übergeben.)

Denken Sie daran, dass nur, weil der Browser die cross-domain API unterstützt, bedeutet nicht, dass der Zielserver die Anfrage zu vervollständigen.

+0

Ich habe das versucht, aber ich bekomme ein falsches positives über Opera. Mein spezieller Fall ist das Laden einer lokalen Datei aus einer lokalen Datei, die durch Überprüfen einer Sicherheitseinstellung aktiviert werden kann. Ich kann jedoch nicht sagen, ob diese Einstellung tatsächlich überprüft wird oder nicht, ohne es zu versuchen. – Okarin

4

Sie könnten sich die EasyXDM ansehen, die Cross-Browser-Macken enthält und eine einfach zu bedienende API für die Kommunikation im Client-Skript zwischen verschiedenen Domänen mit dem besten verfügbaren Mechanismus für diesen Browser bietet (zB postMessage, falls verfügbar, andere Mechanismen, wenn nicht).

Offensichtlich hat diese Bibliothek das Problem der Erkennung von Browserfähigkeiten gelöst, so dass Sie von deren Erfahrung profitieren können. :-)

1

IE8 hat auch XDomainRequest Objekt, das zum Abrufen von RSS als Text verwendet werden kann, der später in DOM geparst werden kann.