Ich habe eine kleine xslt-Datei erstellt, um eine HTML-Ausgabe namens weather.xsl mit folgendem Code zu erstellen:
<!-- DWXMLSource="http://weather.yahooapis.com/forecastrss?w=38325&u=c" -->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
exclude-result-prefixes="yweather"
xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<img src="{/*/*/item/yweather:condition/@text}.jpg"/>
</xsl:template>
</xsl:stylesheet>
Ich möchte die HTML-Ausgabe in ein Div in einer HTML-Datei laden, was ich mit jQuery wie folgt tun möchte:
<div id="result">
<script type="text/javascript">
$('#result').load('weather.xsl');
</script>
</div>
Es wird jedoch die folgende Fehlermeldung angezeigt: Origin null wird von Access-Control-Allow-Origin nicht zugelassen.
Ich habe über das Hinzufügen eines Headers zum xslt gelesen, bin mir aber nicht sicher, wie ich das machen soll. Daher wäre jede Hilfe willkommen. Wenn das Laden in die HTML-Ausgabe nicht auf diese Weise erfolgen kann, dann Ratschläge dazu es zu tun wäre toll.
javascript
null
xmlhttprequest
cors
localhost
dudledok
quelle
quelle
load
Anruf? Es gibt überhaupt keinen Weg?Antworten:
Origin
null
ist das lokale Dateisystem. Dies deutet darauf hin, dass Sie die HTML-Seite, die denload
Aufruffile:///
ausführt, über eine URL laden (z. B. durch Doppelklicken in einem lokalen Dateibrowser oder ähnlichem). Verschiedene Browser verfolgen unterschiedliche Ansätze, um dieselbe Ursprungsrichtlinie auf lokale Dateien anzuwenden .Ich vermute, dass Sie dies mit Chrome sehen. Die Regeln von Chrome zum Anwenden der SOP auf lokale Dateien sind sehr streng. Das Laden von Dateien aus demselben Verzeichnis wie das Dokument ist nicht zulässig. Opera auch. Einige andere Browser, wie z. B. Firefox, erlauben den eingeschränkten Zugriff auf lokale Dateien. Grundsätzlich funktioniert die Verwendung von Ajax mit lokalen Ressourcen jedoch nicht browserübergreifend.
Wenn Sie nur etwas lokal testen, das Sie wirklich im Web bereitstellen, anstatt lokale Dateien zu verwenden, installieren Sie einen einfachen Webserver und testen Sie
http://
stattdessen über URLs. Das gibt Ihnen ein viel genaueres Sicherheitsbild.quelle
$('#result').load('weather.xsl');
), sollte dies nicht passieren, da die Anforderung eindeutig denselben Ursprung hat. Wenn Sie versuchen, von einem anderen Ort (z. B.$('#result').load('http://somewhere.else/weather.xsl');
) zu laden , stoßen Sie erneut auf die SOP, jedoch auf andere Weise. Ajax-Anforderungen sind auf denselben Ursprung beschränkt (siehe Link in der Antwort). Wenn Sie einen CORS- fähigen Browser verwenden und der Server CORs unterstützt, kann der Server auswählen, ob die Ursprungsübergreifende Anforderung zugelassen werden soll.python -m SimpleHTTPServer
von einer Kommandozeile und ging dann zu localhost: 8000, arbeitete für mich. Python ist mit Mac OS X vorinstalliert. Möglicherweise müssen Sie installieren, wenn Sie ein anderes Betriebssystem verwenden.In Chrome und Safari ist die Verwendung von Ajax mit lokalen Ressourcen eingeschränkt. Deshalb wirft es einen Fehler wie
Lösung: Verwenden Sie Firefox oder laden Sie Ihre Daten auf einen temporären Server hoch. Wenn Sie Chrome weiterhin verwenden möchten, starten Sie es mit der folgenden Option.
Weitere Informationen zum Hinzufügen des obigen Parameters zu Chrome: Klicken Sie mit der rechten Maustaste auf das Chrome-Symbol in Ihrer Taskleiste, klicken Sie mit der rechten Maustaste auf Google Chrome im Popup-Fenster, klicken Sie auf Eigenschaften und fügen Sie den obigen Parameter im Textfeld Ziel auf der Registerkarte Verknüpfung hinzu. Es wird wie unten gefallen;
Hoffe das wird helfen!
quelle
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --allow-file-access-from-files &
Beachten Sie das letzte &, damit Sie das Terminal weiterhin verwenden können und es nicht erforderlich ist. HINWEIS: Wenn Sie das Terminal schließen, wird das Chrome-Fenster geschlossen.Ich wollte nur hinzufügen, dass die Antwort "Ausführen eines Webservers" ziemlich entmutigend erscheint, aber wenn Sie Python auf Ihrem System haben (standardmäßig zumindest unter MacOS und jeder Linux-Distribution installiert), ist es so einfach wie:
oder
Wenn Sie also Ihre HTML-Datei
myfile.html
in einem Ordnermydir
haben, müssen Sie beispielsweise nur Folgendes tun:Zeigen Sie dann mit Ihrem Browser auf:
Und du bist fertig! Funktioniert in allen Browsern , ohne die Websicherheit zu deaktivieren, lokale Dateien zuzulassen oder den Browser mit Befehlszeilenoptionen neu zu starten.
quelle
python -m SimpleHTTPServer 8080
Ich möchte demütig hinzufügen, dass laut dieser SO-Quelle: https://stackoverflow.com/a/14671362/1743693 diese Art von Problem jetzt teilweise einfach mithilfe der folgenden jQuery-Anweisung gelöst wird:
Ich habe es auf IE10.0.9200 versucht und es hat sofort funktioniert (mit jquery-1.9.0.js).
Auf Chrome 28.0.1500.95 - diese Anweisung funktioniert nicht (dies geschieht überall, da sich David in den Kommentaren unter dem obigen Link beschwert).
Das Ausführen von Chrome mit --allow-file-access-from-files hat bei mir nicht funktioniert (wie oben von Maistora behauptet)
quelle
Ein bisschen hinzufügen, um Gokhans Lösung für die Verwendung zu verwenden:
Jetzt müssen Sie nur noch den obigen Text in den Zieltext einfügen, gefolgt von einem Leerzeichen. Stellen Sie sicher, dass Sie alle Instanzen des Chrome-Browsers schließen, nachdem Sie die obige Eigenschaft hinzugefügt haben. Starten Sie nun Chrome über das Symbol neu, mit dem Sie diese Eigenschaft hinzugefügt haben. Es sollte für alle funktionieren.
quelle
Ich suchte nach einer Lösung, um eine XHR-Anfrage von einer lokalen HTML-Datei an einen Server zu stellen, und fand eine Lösung mit Chrome und PHP. (kein Jquery)
Javascripts:
Der Anforderungsheader meines Chrome
Origin: null
Mein PHP-Antwortheader (Beachten Sie, dass 'null' eine Zeichenfolge ist ). HTTP_REFERER ermöglicht den Cross-Origin von einem Remote-Server zu einem anderen.
Ich konnte erfolgreich eine Verbindung zu meinem Server herstellen. Sie können die Header für Anmeldeinformationen ignorieren, dies funktioniert jedoch bei
AuthType Basic
aktiviertem ApacheIch habe die Kompatibilität mit FF und Opera getestet. Es funktioniert in vielen Fällen wie:
Von einer VM LAN-IP (192.168.0.x) zurück zur WAN-IP (öffentlich) der VM: port
Von einer VM LAN-IP zurück zu einem Remoteserver-Domänennamen.
Von einer lokalen HTML-Datei zum VM LAN IP- und / oder VM WAN IP:
-Port , Von einer lokalen HTML-Datei zu einem Remoteserver-Domänennamen.
Und so weiter.
quelle
Sie können eine lokale Javascript-Datei (in der Baumstruktur unter Ihrer
file:/
Quellseite) mit dem Quell-Tag laden :Wenn Sie Ihre Eingabe in Javascript codieren, wie in diesem Fall:
mydata.js :
(Dies ist für json einfacher) Dann haben Sie Ihre 'Daten' in einer globalen Javascript-Variablen, die Sie nach Ihren Wünschen verwenden können.
quelle