Próbuję utworzyć witrynę internetową, którą można pobrać i uruchomić lokalnie, uruchamiając plik indeksu.
Wszystkie pliki są lokalne, żadne zasoby nie są używane online.
Kiedy próbuję użyć wtyczki AJAXSLT dla jQuery do przetworzenia pliku XML z szablonem XSL (w podkatalogach), otrzymuję następujące błędy:
XMLHttpRequest cannot load file:///C:/path/to/XSL%20Website/data/home.xml. Origin null is not allowed by Access-Control-Allow-Origin.
XMLHttpRequest cannot load file:///C:/path/to/XSL%20Website/assets/xsl/main.xsl. Origin null is not allowed by Access-Control-Allow-Origin.
Plik indeksu wysyłający zapytanie jest file:///C:/path/to/XSL%20Website/index.html
przechowywany w, gdy używane są pliki JavaScript file:///C:/path/to/XSL%20Website/assets/js/
.
Jak mogę rozwiązać ten problem?
Zasadniczo jedynym sposobem na poradzenie sobie z tym jest uruchomienie serwera WWW na localhost i obsługa go stamtąd.
Przeglądarka nie jest pewna, aby zezwolić żądaniu ajax na dostęp do dowolnego pliku na twoim komputerze, dlatego większość przeglądarek traktuje żądania „file: //” jako niepochodzące do celów „ Polityki tego samego pochodzenia ”
Uruchomienie serwera WWW może być tak proste, jak
cd
wejście do katalogu, w którym znajdują się i działają pliki:źródło
python -m http.server
.Oto skrypt Apple, który uruchomi Chrome z włączonym przełącznikiem --allow-file-access-from-files, dla deweloperów OSX / Chrome:
źródło
open -a 'Google Chrome' --args --allow-file-access-from-files
.To rozwiązanie pozwoli Ci załadować lokalny skrypt za pomocą jQuery.getScript (). Jest to ustawienie globalne, ale można również ustawić opcję crossDomain na podstawie żądania.
źródło
Co z użyciem funkcji FileReader javascript do otwarcia pliku lokalnego, tj .:
Teraz kliknij
Choose file
przycisk i przejdź do plikufile:///C:/path/to/XSL%20Website/data/home.xml
źródło
Uruchomienie chrom jak tak do obejścia tego ograniczenia:
open -a "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --args --allow-file-access-from-files
.Pochodzi z komentarza Josha Lee, ale musiałem podać pełną ścieżkę do Google Chrome, aby uniknąć otwierania Google Chrome z mojej partycji Windows (w Parallels).
źródło
Sposób, w jaki właśnie to obejrzałem, nie polega wcale na korzystaniu z XMLHTTPRequest, ale na dołączeniu potrzebnych danych do osobnego pliku javascript. (W moim przypadku potrzebowałem binarnego obiektu blob SQLite do użycia z https://github.com/kripken/sql.js/ )
Utworzyłem plik o nazwie
base64_data.js
(i użyłem gobtoa()
do konwersji potrzebnych danych i wstawienia go,<div>
aby móc go skopiować).a następnie zawarł dane w html jak normalny javascript:
Wyobrażam sobie, że modyfikacja tego do odczytu JSON, a może nawet XML, byłaby trywialna; Zostawię to jako ćwiczenie dla czytelnika;)
źródło
Można spróbować umieścić
'Access-Control-Allow-Origin':'*'
wresponse.writeHead(, {[here]})
.źródło
użyj „serwera WWW dla aplikacji Chrome”. (faktycznie masz go na swoim komputerze, niezależnie od tego, czy wiesz. Po prostu wyszukaj go w Cortanie!). otwórz go i kliknij „wybierz plik”, wybierz folder z plikiem. nie wybieraj pliku. wybierz folder plików, a następnie kliknij łącze (łącza) pod przyciskiem „wybierz folder”.
jeśli nie zabierze Cię do pliku, dodaj nazwę pliku do urs. lubię to:
link do serwera WWW dla chrome: kliknij mnie
źródło