XMLHttpRequest Origin null neleidžiama Access-Control-Allow-Origin failui: /// failui: /// (be serverio)

Bandau sukurti svetainę, kurią galima parsisiųsti ir paleisti vietoje, paleisdami jo indekso failą.

Visi failai yra vietiniai, ištekliai nėra naudojami internete.

Kai bandau naudoti „AJAXSLT“ papildinį, skirtą „jQuery“ XML rinkmenai apdoroti naudojant XSL šabloną (pakatalogiuose), gaunu šias klaidas:

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.

Indekso failas, sukuriantis užklausą, yra file:///C:/path/to/XSL%20Website/index.html , o naudojami „JavaScript“ failai yra saugomi file:///C:/path/to/XSL%20Website/assets/js/ .

Kaip tai išspręsti?

204
17 нояб. nustatė Kevin Herrera lapkričio 17 d 2010-11-17 22:52 '10 10:52 val. 2010-11-17 22:52
@ 8 atsakymai

Tais atvejais, kai vietinio žiniatinklio serverio paleidimas nėra parinktis, galite leisti „Chrome“ pasiekti file:// failus per naršyklės jungiklį. Po kai kasimo, aš aptikau šią diskusiją , kurioje paminėta naršyklės jungiklis atidarytame pranešime. Paleiskite „Chrome“ egzempliorių:

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

Tai gali būti priimtina plėtros aplinkai, bet šiek tiek daugiau. Jūs tikrai nenorite to visą laiką. Jis vis dar atrodo atviras (nuo 2011 m. Sausio mėn.).

Taip pat žiūrėkite: Problemos, susijusios su „jQuery getJSON“ naudojant „Chrome“ vietinius failus

174
20 янв. Courtney Christensen atsakymas, sausio 20 d 2011-01-20 23:52 '11, 11:52 PM 2011-01-20 23:52

Tiesą sakant, vienintelis būdas tai tvarkyti yra turėti vietinį serverį, kuriame veikia vietinis kompiuteris, ir aptarnauti jį iš ten.

Naršyklėje nėra saugu leisti „ajax“ užklausai pasiekti bet kurį failą kompiuteryje, todėl dauguma naršyklių, atrodo, tvarko failą: // prašymus, neturinčius kilmės tos pačios kilmės politikos .

Žiniatinklio serverio paleidimas gali būti toks pat nereikšmingas kaip ir kataloge, kuriame yra failai:

 python -m SimpleHTTPServer 
86
25 нояб. Atsakymas duotas Singletoned 25 lapkričio. 2010-11-25 15:14 '10, 15:14, 2010-11-25 15:14

Kaip naudoti javascript FileReader, kad atidarytumėte vietinį failą, ty:

 <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> 

Dabar spustelėkite mygtuką Choose file ir eikite į file:///C:/path/to/XSL%20Website/data/home.xml

4
31 мая '14 в 3:25 2014-05-31 03:25 atsakymas pateikiamas paprasto_žmogaus gegužės 31 d. 14 d. 3:25 2014-05-31 03:25

Šis sprendimas leis jums įkelti vietinį scenarijų naudojant jQuery.getScript (). Tai yra pasaulinis nustatymas, bet taip pat galite nustatyti kiekvienos užklausos crossDomain parametrą.

 $.ajaxPrefilter( "json script", function( options ) { options.crossDomain = true; }); 
4
22 авг. Renaudas atsakė rugpjūčio 22 d 2013-08-22 13:19 '13, 13:19, 2013-08-22 13:19

Čia yra obuolys, kuris paleidžia „Chrome“ su „allow-file-access-from-files “jungikliu, įgalintu OSX /„ Chrome “kūrėjams:

 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> > 
4
09 авг. atsakymą pateikė ericsoco 09 rug . 2011-08-09 08:12 '11 at 8:12 am 2011-08-09 08:12

Paleiskite „Chrome“, kad open -a "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --args --allow-file-access-from-files šį apribojimą: open -a "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --args --allow-file-access-from-files .

Išvados iš Josh Lee komentaro , bet turėjau nurodyti visą kelią į „Google Chrome“, kad būtų išvengta „Google Chrome“ atidarymo iš „Windows“ skaidinio („Parallels“).

3
14 июля '14 в 9:01 2014-07-14 09:01 Stunner atsakymas liepos 14 d. 14 val. 9:01 2014-07-14 09:01

Galite pabandyti įdėti 'Access-Control-Allow-Origin':'*' response.writeHead(, {[here]}) .

1
25 июля '13 в 11:06 2013-07-25 11:06 atsakymą pateikė Shikon, liepos 25 d., 13 val., 11:06, 2013-07-25 11:06

Kaip aš ką tik dirbo, ne naudoti XMLHTTPRequest, bet vietoj to įtraukti reikalingus duomenis į atskirą „JavaScript“ failą. (Mano atveju reikėjo dvejetainio SQLite bloko, skirtą naudoti su https://github.com/kripken/sql.js/ )

Aš sukūriau failą, pavadintą base64_data.js (ir naudoju btoa() kad galėčiau konvertuoti btoa() duomenis ir įdėti jį į <div> , kad galėčiau jį kopijuoti).

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

ir tada įtraukėte duomenis į html, kaip įprasta 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> 

Manau, kad tai būtų triviška keisti, kad galėtume perskaityti JSON, galbūt net XML; Aš paliksiu jį kaip skaitytojui skirtą pratimą;)

1
29 окт. Anthony Briggs atsakymas, spalio 29 d 2015-10-29 05:14 '15 at 5:14 2015-10-29 05:14