Izinkan Google Chrome menggunakan XMLHttpRequest untuk memuat URL dari file lokal

125

Ketika mencoba melakukan permintaan HTTP menggunakan XMLHttpRequest dari file lokal, itu pada dasarnya gagal karena Access-Control-Allow-Originpelanggaran.

Namun, saya menggunakan halaman web lokal sendiri, jadi saya bertanya-tanya apakah ada cara untuk membuat Google Chrome mengizinkan permintaan ini, yang berasal dari file lokal ke URL di Internet.

Misalnya, $.get('http://www.google.com/')gagal ketika mengeksekusi di file lokal, tetapi saya telah membuat skrip halaman sendiri dan saya menggunakannya sendiri, jadi akan sangat berguna jika saya bisa menekannya dan memuat URL.

Jadi, bagaimana saya bisa mengizinkan Google Chrome memuat URL menggunakan XMLHttpRequest dari file lokal?

pimvdb
sumber
1
Access-Control-Allow-Origin: nulloleh situs web bekerja. (ofc. bukan oleh google.com)
inf3rno
3
@JessamynSmith: Urutan jawaban berubah, dan jawaban yang diterima juga dapat berubah, jadi lebih baik menautkan ke jawaban daripada mengatakan apa pun seperti 'jawaban di bawah jawaban yang diterima'. Gunakan URL tempat tautan 'bagikan' jawaban mengarah.
Michael Scheper
2
@MichaelScheper Komentar Anda agak tidak relevan mengingat bahwa saya menempelkan pada perintah aktual yang berfungsi. Namun, jika ada nilai dalam memasukkan tautan, saya dihapus dan dihapus. Di Chrome modern, kesalahan tampak seperti: XMLHttpRequest tidak dapat memuat file: ///path/to/file/css/base.css. Permintaan lintas asal hanya didukung untuk skema protokol: http, data, chrome, ekstensi chrome, https, chrome-extension-resource. Jawaban ini stackoverflow.com/a/4819114/1649165 bekerja untuk saya, yaitu jalankan chrome dari baris perintah: chrome --allow-file-access-from-files
Jessamyn Smith
@JessamynSmith: Maaf Anda pikir saran saya tidak relevan. Karena Anda pikir jawaban tertentu relevan, saya pikir Anda mungkin ingin membuktikan komentar Anda di masa depan. Kesalahanku.
Michael Scheper

Jawaban:

49

startup chrome dengan --disable-web-security

Di Windows:

chrome.exe --disable-web-security

Di Mac:

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

Ini akan memungkinkan permintaan lintas domain.
Saya tidak mengetahui apakah ini juga berfungsi untuk file lokal, tetapi beri tahu kami!

Dan sebutkan, ini sesuai dengan yang Anda harapkan, ini menonaktifkan keamanan web, jadi berhati-hatilah.

jandy
sumber
Anda juga dapat menggunakan Safari di Mac. Ini memungkinkan AJAX untuk file lokal secara default ketika permintaan dibuat dari file lokal. Juga, tentang '.exe', tidak ada dalam Q yang dikatakan tentang Windows. Pim adalah pengembang Windows, tapi tetap saja, tidak ada yang dikatakan tentang Windows.
1
Ya saya di Windows, maaf soal itu. Akan mencoba ini sekarang, terima kasih. Ngomong-ngomong, saya selalu menjalankan Chrome ketika komputer saya hidup, jadi apakah ada cara untuk hanya mengizinkan permintaan lintas domain dengan file lokal atau hanya di tab tertentu? Karena dengan cara ini, saya sebenarnya tidak dapat menjelajah Internet dengan aman secara bersamaan ...
pimvdb
1
Saya baru saja mengunduh Chromium build terbaru agar versi mandiri dan tidak aman berjalan untuk pengujian, dan Chrome 'asli' yang diinstal untuk penelusuran internet yang aman. Dan itu berhasil, terima kasih!
pimvdb
@ Tom - Anda harus dapat melakukan ini di Mac dengan Safari, tanpa perubahan pengaturan apa pun, selama Anda menggunakan protokol "file: ///" dan bukan " localhost "
Near Privman
2
Saya mencobanya di Safari 10.1 dan itu memberi saya: XMLHttpRequest cannot load file:///<my_local_file>. Cross origin requests are only supported for HTTP.jadi pernyataan tentang browser Safari dari utas ini tidak lagi valid.
Michal Cichon
233

Menggunakan --disable-web-securitysakelar cukup berbahaya ! Mengapa menonaktifkan keamanan sama sekali sementara Anda hanya bisa mengizinkan XMLHttpRequest untuk mengakses file dari file lain yang menggunakan--allow-file-access-from-files sakelar?

Sebelum menggunakan perintah ini pastikan untuk mengakhiri semua instance Chrome yang berjalan.

Di Windows:

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

Di Mac:

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

Diskusi tentang "fitur" Chrome ini:

Konstantin Smolyanin
sumber
5
Apakah mungkin menjadikan ini perilaku default tanpa harus membuka terminal / baris perintah atau pintasan khusus setiap saat?
Kokodoko
1
@ Kodokoko saya pikir tidak.
Konstantin Smolyanin
2
@ JoshH Saya sepenuhnya setuju bahwa jauh lebih baik menggunakan server web lokal untuk pengembangan situs web daripada mengakses file lokal secara langsung oleh browser. Namun pertanyaan persisnya ditanyakan dan saya baru saja menjawabnya.
Konstantin Smolyanin
13
Jika ada orang lain yang akan mencoba ini: flag ini tidak tersedia / dapat dimodifikasi dichrome://flags
Blaise
5
@ pimvdb Saya pikir Anda harus menandai yang ini sebagai jawaban yang diterima.
chris-l
21

Versi Mac. Dari terminal run:

open /Applications/Google\ Chrome.app/ --args --allow-file-access-from-files
Nek
sumber
Saya melihat beberapa suara di sini. Bisakah Anda menguraikan apa yang salah dengan jawaban saya?
Nek
Sebagai jawaban lain menjelaskan, tidak bijaksana untuk menyarankan menonaktifkan semua keamanan web ketika ada saklar khusus yang mengubah satu hal ini.
curiousdannii
alangkah baiknya memiliki solusi yang lebih permanen. Yang ini mengasumsikan pengguna tahu sebelumnya dan juga membutuhkan peluncuran ulang chrome.
Michael Dunn
3

Di Ubuntu:

chromium-browser --disable-web-security

Untuk keterangan lebih lanjut / sakelar:

http://peter.sh/experiments/chromium-command-line-switches/

Dirujuk dari

Taimoor Changaiz
sumber
Saya pikir menentukan file akan lebih aman `google-chrome --allow-file-access-from-files ~ / foo`
Muhammed Moussa
Ini agak luas untuk kasus penggunaan khusus. Tetapi alat peraga untuk solusi terlepas
Michael Dunn