2010-08-14 8 views

Antwort

2

Es gibt verschiedene Möglichkeiten, dies zu umgehen, je nachdem, welchen Browser Sie für die Entwicklung verwenden. Zum Beispiel:

  • In Firefox (Gecko), security.fileuri.strict_origin_policy
  • In Chrome false setzen, starten Sie den Browser mit der Option --allow-file-access-from-files

Referenzen: Firefox, Chrome

0

Da es sich um ein Entwicklungsproblem und kein Endbenutzer/Funktionalität Problem, anstatt sich auf AJAX immer Domains überqueren Ihre Entwicklungsumgebung als Proxy einrichten lassen um die neuesten Daten von den Produktionsservern abzurufen. Das ist eigentlich wirklich einfach zu machen.

Sie müssten in Ihrer Entwicklungsumgebung einen Webserver einrichten (falls noch keiner vorhanden ist) und anschließend den Server so konfigurieren, dass auf 404-Anforderungen reagiert wird, indem Produktionsdaten abgerufen und anschließend ausgegeben werden. Sie können Ihren Server so einrichten, dass nur die AJAX-Datendateien abgerufen werden (anderenfalls wird es beim Debuggen anderer Dateien verwirrend sein, wenn Produktionsressourcen auf Ihren Entwicklungsseiten angezeigt werden). Wenn also http://dev.myserver.com/data/json/mydata.json fehlt, erhält Ihr 404-Skript http://prod.myserver.com/data/json/mydata.json und echo es auf dem Client. Das Schöne an diesem Setup ist, dass Sie einfach Mock-Daten verwenden können: Wenn die Datei in Ihrer Entwicklungsumgebung vorhanden ist, wird Ihr AJAX-Skript das bekommen; Wenn Sie diese Datei dann jedoch löschen oder umbenennen, erhalten Sie stattdessen die Produktionsdaten. Diese Funktion ist so nützlich, dass ich sie nicht genug empfehlen kann.

Wenn Sie mit XML arbeiten, ich die HTTP-Header in der 404. Duplizieren würde empfehlen, wenn Ihr 404 Verfahren mit einem Content-Type von text/html antwortet, werden jede responseXML zu analysieren nicht bekommen.

4

Wir hatten den gleichen Bedarf bei der Entwicklung unserer Web-App. Hier ist, wie wir es gemacht haben:

Der Browser und der Server kommunizieren nur über JSON.
Der gesamte HTML-Code wird im Browser unter Verwendung von PURE (unserer JS-Vorlagen-Engine) gerendert.
Der Browser Code lokal wie folgt entwickelt:

Wir fügen einen host Parameter in der URL der App:

http://localhost/app.html?host=test.beebole-apps.com 

In der Produktion werden die JSON an den Server mit einem POST gesendet.
Aber hier ist die Funktion verantwortlich für den Ajax-Aufruf wird den host Parameter reagieren und eine JSONP Injektion (GET) stattdessen machen.

<script src="http://test.beebole-apps.com/?callback=f2309892&json={...}" /> 
  • f2309892 ist eine temporäre Funktion, mit einem zufälligen Namen, dass Punkte auf die Methode, die die Antwort
  • json ist die JSON wir

an den Server senden behandeln bedeutet, Sie benötigen eine Zusammenarbeit aus dem Backend, um Ihnen den JSON in einer Callback-Funktion wie:

Außer einer Größenbeschränkung (Sie eine große JSON an den Server mit einem GET nicht senden kann) es wie ein Kinderspiel funktioniert.
Ein weiterer Vorteil ist, dass Sie all die verschiedenen Systeme (Entwicklung und Test) aus dem gleichen localhost aufrufen können.

+0

das ist toll zu bedienen! i bemerken Sie nicht über diese lokale Nutzung von PURE haben in http://beebole.com/pure/documentation/what-is-pure-and-why/ ... Auch - können Sie Ihre Worte ein kleines bisschen erweitern zu schreiben ein Tutorial in http://beebole.com/pure/documentation/? – ina

+0

auch (nur um sicher zu sein) - 'http: //localhost/app.html? Host = test.beebole-apps.com ist auf der Client-Seite (wo Sie den Client haben, laden Sie eine App mit irgendeiner Art von Webserver oder URL Paser in es ...) und es ruft den Server 'test.beebole-apps.com'? – ina

+0

PURE ist eine JS-Bibliothek, die HTML aus JSON-Daten erstellt. Es funktioniert im Browser. Wenn Sie die ZIP-Datei herunterladen, gibt es ein Verzeichnis namens Tutorial mit einigen Beispielen. – Mic

6

Hier ist die einfache Antwort: chrom --disable-Web-Sicherheit

Aus dem Quellcode (chrome_switches.h):

// Don't enforce the same-origin policy. (Used by people testing their sites.) 
const char kDisableWebSecurity[]   = "disable-web-security"; 

Ich wollte jquery.js verwenden AJAX Anrufe senden an ein Google Apps-Python-Server, der auf Port 8080 ausgeführt wird. Ich wollte den Browser und den Server nur zum Testen auf demselben Computer ausführen.

Ich verstehe nicht, alle Sicherheits Nuancen, aber für temporäre Entwicklung scheint es wie eine angemessene Abhilfe. Solange ich nur Chrom zum Testen mit diesem Flag verwende, sollte das kein Problem sein.

Hier ist der ganze Befehl für Mac OS X:

/Anwendungen/Google \ Chrome.app/Contents/MacOS/Google \ Chrome --disable-Web-Sicherheit

+0

Denken Sie daran, alle Instanzen des Chrom-Prozesses zu töten, bevor Sie dies tun, oder es wird nicht funktionieren. – Ferruccio

0

ich dieses Problem hatte auch , mit Chrome und der --allow-file-access-from-files Option hat nicht wirklich geholfen. Zurück zum Skript meines Server zurückzukehren benötigte, habe ich diese Header auf die Antwort und es funktionierte gut:

'Access-Control-Allow-Origin: http://localhost/' 

und ein anderes für so dass eine Art Schlüsselaustausch

'Access-Control-Allow-Headers: X-KEY' 
1

ohne den Server zu berühren -

der schnellste und einfachste Weg, die gleiche Ursprung Sicherheitspolitik in Firefox zu umgehen ist die Kraft CORS Add-on installieren. Dies funktioniert mit jedem Dienst, indem die richtigen Header in jede Antwort eingefügt werden.

https://addons.mozilla.org/en-US/firefox/addon/forcecors/

+0

Erwähnenswert, dass Sie nach der Installation auf view => toolbars => add-on bar klicken müssen. Dann wird der Korsett Knopf in der rechten unteren Ecke angezeigt, klicke darauf, um es zu aktivieren. Ich entzippte das xpi und sah, dass es eine Umschaltfunktion gab, wenn eine Taste gedrückt wurde, aber nie die Taste sah. – HMR