Google Chrome'un yerel bir dosyadan bir URL yüklemek için XMLHttpRequest'i kullanmasına izin verin


125

Yerel bir dosyadan XMLHttpRequest kullanarak bir HTTP isteği yapmaya çalışırken, Access-Control-Allow-Originihlal nedeniyle temelde başarısız olur .

Ancak, yerel web sayfasını kendim kullanıyorum, bu yüzden Google Chrome'un, yerel bir dosyadan İnternet'teki bir URL'ye bu isteklere izin vermesini sağlamanın bir yolu olup olmadığını merak ediyordum.

Örneğin, $.get('http://www.google.com/')yerel bir dosyada çalıştırırken başarısız oluyor, ancak sayfanın komut dosyasını kendim oluşturdum ve onu kendim kullanıyorum, bu nedenle onu bastırıp URL'yi yükleyebilirsem son derece yararlı olur.

Öyleyse, Google Chrome'un yerel dosyalardan XMLHttpRequest kullanarak URL'leri yüklemesine nasıl izin verebilirim?


1
Access-Control-Allow-Origin: nullweb sitesi tarafından çalışır. (ofc. google.com tarafından değil)
inf3rno

3
@JessamynSmith: Cevapların sırası değişir ve kabul edilen cevap da değişebilir, bu nedenle 'kabul edilen cevabın altındaki cevap' gibi bir şey söylemektense bir cevaba bağlantı vermek daha iyidir. Cevabın 'paylaş' bağlantısının yönlendirdiği URL'yi kullanın.
Michael Scheper

2
@MichaelScheper İşe yarayan gerçek komuta yapıştırdığım için yorumunuz biraz alakasız. Ancak, bağlantıyı dahil etmede bir değer olması durumunda, sildim ve yeniden gönderdim. Modern Chrome'da hatalar şöyle görünür: XMLHttpRequest file: ///path/to/file/css/base.css'yi yükleyemez. Çapraz kaynak istekleri yalnızca protokol şemaları için desteklenir: http, data, chrome, chrome-extension, https, chrome-extension-resource. Bu cevap stackoverflow.com/a/4819114/1649165 , yani komut satırından krom çalıştırmak benim için çalıştı: krom --allow-file-access-from-dosyaları
Jessamyn Smith

@JessamynSmith: Tavsiyemin alakasız olduğunu düşündüğün için üzgünüm. Belirli bir cevabın konuyla ilgili olduğunu düşündüğünüz için, yorumunuzu ileride düzeltmek isteyebileceğinizi düşündüm. Benim hatam.
Michael Scheper

Yanıtlar:


49

ile Chrome'u başlat --disable-web-security

Windows'ta:

chrome.exe --disable-web-security

Mac'te:

open /Applications/Google\ Chrome.app/ --args --disable-web-security

Bu, alanlar arası isteklere izin verecektir.
Bunun yerel dosyalar için de işe yarayıp yaramadığını bilmiyorum, ancak bize bildirin!

Ve bahset, bu tam olarak beklediğiniz şeyi yapıyor , web güvenliğini devre dışı bırakıyor , bu yüzden dikkatli olun.


Safari'yi bir Mac'te de kullanabilirsiniz. Yerel bir dosyadan istek yapıldığında AJAX'ın varsayılan olarak yerel dosyalara erişmesine izin verir. Ayrıca, '.exe' hakkında, Q'da Windows hakkında hiçbir şey söylenmez. Pim bir Windows geliştiricisidir, ancak yine de Windows hakkında hiçbir şey söylenmedi.

1
Evet Windows kullanıyorum, bunun için üzgünüm. Bunu şimdi deneyeceğim, teşekkürler. Bu arada, Chrome'u her zaman bilgisayarım açıkken çalıştırıyorum, bu nedenle yalnızca yerel dosyalarla veya yalnızca belirli bir sekmede etki alanları arası isteğe izin vermenin bir yolu var mı? Çünkü bu şekilde, aslında aynı anda güvenli bir şekilde internette
dolaşamıyorum

1
Test için çalışan bağımsız, güvenli olmayan bir sürüme ve güvenli İnternet taraması için 'gerçek' Chrome'u yükleyebilmek için en son Chromium yapısını indirdim. Ve işe yarıyor, teşekkürler!
pimvdb

@Tom - " localhost " değil, "file: ///" protokolünü kullandığınız sürece, bunu herhangi bir ayar değişikliği yapmadan Safari ile Mac'te yapabilirsiniz
Privman

2
Safari 10.1'de denedim ve bana verdi: XMLHttpRequest cannot load file:///<my_local_file>. Cross origin requests are only supported for HTTP.bu yüzden bu başlıktaki Safari tarayıcısı hakkındaki ifade artık geçerli değil.
Michal Cichon

233

--disable-web-securityAnahtarı kullanmak oldukça tehlikelidir ! --allow-file-access-from-filesAnahtar kullanarak XMLHttpRequest'in diğer dosyalardan dosyalara erişmesine izin verirken neden güvenliği devre dışı bırakasınız ?

Bu komutları kullanmadan önce, çalışan tüm Chrome örneklerini sonlandırdığınızdan emin olun.

Windows'ta:

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

Mac'te:

open /Applications/Google\ Chrome.app/ --args --allow-file-access-from-files

Chrome'un bu "özelliği" ile ilgili tartışmalar :


5
Her seferinde bir terminal / komut satırı veya özel bir kısayol açmak zorunda kalmadan bunu varsayılan davranış haline getirmek mümkün mü?
Kokodoko

1
@Kokodoko Sanırım hayır.
Konstantin Smolyanin

2
@JoshH Web sitesi geliştirme için yerel web sunucusunu kullanmanın, ardından yerel dosyalara doğrudan tarayıcıdan erişmenin çok daha iyi olduğuna tamamen katılıyorum. Ancak tam olarak soru soruldu ve ben sadece cevapladım.
Konstantin Smolyanin

13
Başka birinin bunu denemesi durumunda: bu bayrak şu konumda mevcut değil / değiştirilemezchrome://flags
Blaise

5
@pimvdb Bence bunu kabul edilen cevap olarak işaretlemelisiniz.
chris-l

21

Mac sürümü. Terminal çalışmasından:

open /Applications/Google\ Chrome.app/ --args --allow-file-access-from-files

Burada birkaç olumsuz oy görüyorum. Cevabımda neyin yanlış olduğunu açıklayabilir misin?
Nek

Diğer yanıtların da açıkladığı gibi, bu tek şeyi değiştiren belirli bir anahtar olduğunda tüm web güvenliğinin devre dışı bırakılmasını önermek akıllıca değildir.
wonderdannii

daha kalıcı bir çözüme sahip olmak güzel olurdu. Bu, kullanıcının önceden bildiğini ve ayrıca Chrome'un yeniden başlatılmasını gerektirdiğini varsayar.
Michael Dunn

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.