XMLHttpRequest Origin null nie jest dozwolone Access-Control-Allow-Origin dla pliku: / / / do pliku: / / / (Serverless)

Próbuję stworzyć stronę internetową, którą można pobrać i uruchomić lokalnie, uruchamiając jej plik indeksu.

Wszystkie pliki są lokalne, żadne zasoby nie są używane online.

Kiedy próbuję użyć wtyczki AJAXSLT dla jQuery do przetwarzania 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 wykonujący żądanie to file:///C:/path/to/XSL%20Website/index.html, podczas gdy używane pliki JavaScript są przechowywane w file:///C:/path/to/XSL%20Website/assets/js/.

Jak mogę to zrobić rozwiązać ten problem?

Author: devnull69, 2010-11-17

8 answers

W przypadkach, gdy uruchamianie lokalnego serwera www nie jest możliwe, możesz zezwolić Chrome na dostęp do plików file:// za pomocą przełącznika przeglądarki. Po pewnym kopaniu znalazłem tę dyskusję , która wspomina o przełączniku przeglądarki w otwierającym poście. Uruchom instancję Chrome za pomocą:

chrome.exe --allow-file-access-from-files

Może to być dopuszczalne dla środowisk programistycznych, ale niewiele więcej.Na pewno nie chcesz tego cały czas. Nadal wydaje się, że jest to kwestia otwarta (stan na styczeń 2011).

Zobacz też również: problemy z jQuery getJSON przy użyciu plików lokalnych w Chrome

 173
Author: Courtney Christensen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:25

Zasadniczo jedynym sposobem, aby sobie z tym poradzić, jest posiadanie serwera www działającego na localhost i serwowanie go stamtąd.

W związku z tym większość przeglądarek traktuje żądania "file://" jako nie mające źródła pochodzenia do celów " Same Origin Policy "

Uruchomienie serwera www może być równie trywialne jak cdwejście do katalogu, w którym znajdują się pliki i uruchomienie:

python -m SimpleHTTPServer
 85
Author: Singletoned,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-25 12:14:07

Oto applescript, który uruchomi Chrome z włączonym przełącznikiem --allow-file-access-from-files, dla programistów OSX/Chrome:

set chromePath to POSIX path of "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"    
set switch to " --allow-file-access-from-files"
do shell script (quoted form of chromePath) & switch & " > /dev/null 2>&1 &"
 4
Author: ericsoco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-09 05:12:45

To rozwiązanie pozwoli Ci załadować skrypt lokalny używając jQuery.getScript (). Jest to ustawienie globalne, ale możesz również ustawić opcję crossDomain na podstawie żądania.

$.ajaxPrefilter( "json script", function( options ) {
  options.crossDomain = true;
});
 4
Author: Renaud,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-22 10:19:02

Co powiesz na użycie funkcji javascript FileReader do otwarcia lokalnego pliku, czyli:

<input type="file" name="filename" id="filename">
<script>
$("#filename").change(function (e) {
  if (e.target.files != undefined) {
    var reader = new FileReader();
    reader.onload = function (e) {
        // Get all the contents in the file
        var data = e.target.result; 
        // other stuffss................            
    };
    reader.readAsText(e.target.files.item(0));
  }
});
</script>

Teraz kliknij przycisk Choose file i przejdź do pliku file:///C:/path/to/XSL%20Website/data/home.xml

 4
Author: simple_human,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-31 00:25:56

Uruchom chrome tak, aby ominąć to ograniczenie: open -a "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --args --allow-file-access-from-files.

Pochodzi z komentarz Josha Lee ale musiałem określić pełną ścieżkę do Google Chrome, aby uniknąć otwierania Google Chrome z mojej partycji Windows (równolegle).

 3
Author: Stunner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:46:39

Możesz spróbować umieścić 'Access-Control-Allow-Origin':'*' w response.writeHead(, {[here]}).

 1
Author: Shikon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-25 08:26:47

Sposób, w jaki obejrzałem ten problem, to nie używanie XMLHTTPRequest w ogóle, ale dołączenie potrzebnych danych do osobnego pliku javascript. (W moim przypadku potrzebowałem binarnego Bloba SQLite do użycia z https://github.com/kripken/sql.js/)

Utworzyłem plik o nazwie base64_data.js (i użyłem btoa(), Aby przekonwertować potrzebne dane i wstawić je do <div>, Aby móc je skopiować).

var base64_data = "U1FMaXRlIGZvcm1hdCAzAAQA ...<snip lots of data> AhEHwA==";

A następnie zawarte DANE w html jak normalny javascript:

<div id="test"></div>

<script src="base64_data.js"></script>
<script>
    data = atob(base64_data);
    var sqldb = new SQL.Database(data);
    // Database test code from the sql.js project
    var test = sqldb.exec("SELECT * FROM Genre");
    document.getElementById("test").textContent = JSON.stringify(test);
</script>

Wyobrażam sobie byłoby banalnie zmodyfikować to, aby czytać JSON, może nawet XML; zostawię to jako ćwiczenie dla czytelnika;)

 1
Author: Anthony Briggs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-29 02:52:11