อนุญาตให้ Google Chrome ใช้ XMLHttpRequest เพื่อโหลด URL จากไฟล์ในเครื่อง


125

เมื่อพยายามส่งคำขอ HTTP โดยใช้ XMLHttpRequest จากไฟล์ในเครื่องโดยทั่วไปจะล้มเหลวเนื่องจากการAccess-Control-Allow-Originละเมิด

อย่างไรก็ตามฉันใช้หน้าเว็บท้องถิ่นด้วยตัวเองดังนั้นฉันจึงสงสัยว่ามีวิธีใดบ้างที่จะทำให้ Google Chrome อนุญาตคำขอเหล่านี้ซึ่งมาจากไฟล์ในเครื่องไปยัง URL บนอินเทอร์เน็ต

เช่น$.get('http://www.google.com/')ล้มเหลวเมื่อดำเนินการในไฟล์ในเครื่อง แต่ฉันได้เขียนสคริปต์หน้าด้วยตัวเองและฉันใช้งานด้วยตัวเองดังนั้นจะมีประโยชน์อย่างยิ่งหากฉันสามารถระงับและโหลด URL ได้

ดังนั้นฉันจะอนุญาตให้ Google Chrome โหลด URL โดยใช้ XMLHttpRequest จากไฟล์ในเครื่องได้อย่างไร


1
Access-Control-Allow-Origin: nullโดยเว็บไซต์ทำงาน (ofc. not by google.com)
inf3rno

3
@JessamynSmith: ลำดับของคำตอบจะเปลี่ยนไปและคำตอบที่ยอมรับก็อาจเปลี่ยนไปเช่นกันดังนั้นการเชื่อมโยงไปยังคำตอบจะดีกว่าการพูดอะไรเช่น 'คำตอบด้านล่างคำตอบที่ยอมรับ' ใช้ URL ที่ลิงก์ 'แบ่งปัน' ของคำตอบนำไปสู่
Michael Scheper

2
@MichaelScheper ความคิดเห็นของคุณค่อนข้างไม่เกี่ยวข้องเนื่องจากฉันวางในคำสั่งจริงที่ใช้งานได้ อย่างไรก็ตามในกรณีที่มีค่าในการรวมลิงค์ฉันลบและโพสต์ใหม่ ใน Chrome สมัยใหม่ข้อผิดพลาดมีลักษณะดังนี้ XMLHttpRequest ไม่สามารถโหลดไฟล์: ///path/to/file/css/base.css คำขอข้ามแหล่งที่มารองรับเฉพาะโครงร่างโปรโตคอล: http, data, chrome, chrome-extension, https, chrome-extension-resource คำตอบนี้stackoverflow.com/a/4819114/1649165ใช้ได้กับฉันเช่นเรียกใช้ chrome จากบรรทัดคำสั่ง: chrome --allow-file-access-from-files
Jessamyn Smith

@JessamynSmith: ขอโทษที่คุณคิดว่าคำแนะนำของฉันไม่เกี่ยวข้อง เนื่องจากคุณคิดว่าคำตอบนั้นเกี่ยวข้องฉันจึงคิดว่าคุณอาจต้องการพิสูจน์ความคิดเห็นของคุณในอนาคต ความผิดพลาดของฉัน.
Michael Scheper

คำตอบ:


49

เริ่มต้น chrome ด้วย --disable-web-security

บน Windows:

chrome.exe --disable-web-security

บน Mac:

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

ซึ่งจะอนุญาตให้มีการร้องขอข้ามโดเมน
ฉันไม่ทราบว่าสิ่งนี้ใช้ได้กับไฟล์ในเครื่องด้วยหรือไม่ แต่โปรดแจ้งให้เราทราบ!

และพูดถึงสิ่งนี้ทำในสิ่งที่คุณคาดหวังมันปิดการใช้งานความปลอดภัยของเว็บดังนั้นโปรดระวัง


คุณยังสามารถใช้ Safari บนเครื่อง Mac อนุญาตให้ AJAX เป็นไฟล์ในเครื่องโดยค่าเริ่มต้นเมื่อมีการร้องขอจากไฟล์ในเครื่อง นอกจากนี้เกี่ยวกับ '.exe' ไม่มีอะไรใน Q ที่กล่าวถึงเกี่ยวกับ Windows พิมเป็นนักพัฒนา Windows แต่ก็ยังไม่มีอะไรพูดเกี่ยวกับ Windows

1
ใช่ฉันใช้ Windows ขอโทษด้วย จะลองตอนนี้ขอบคุณ อย่างไรก็ตามฉันใช้ Chrome ตลอดเวลาเมื่อคอมพิวเตอร์เปิดอยู่ดังนั้นจะมีวิธีอนุญาตเฉพาะคำขอข้ามโดเมนกับไฟล์ในเครื่องหรือเฉพาะในแท็บเฉพาะเท่านั้น เพราะวิธีนี้ฉันไม่สามารถท่องอินเทอร์เน็ตได้อย่างปลอดภัยในเวลาเดียวกัน ...
pimvdb

1
ฉันเพิ่งดาวน์โหลด Chromium build ล่าสุดเพื่อให้มีเวอร์ชันสแตนด์อโลนที่ไม่ปลอดภัยสำหรับการทดสอบและ Chrome ที่ติดตั้ง 'ของจริง' เพื่อการท่องอินเทอร์เน็ตอย่างปลอดภัย และมันได้ผลขอบคุณ!
pimvdb

@Tom - คุณควรจะทำได้บน Mac ด้วย Safari โดยไม่มีการเปลี่ยนแปลงการตั้งค่าใด ๆ ตราบใดที่คุณใช้โปรโตคอล "file: ///" ไม่ใช่ " localhost "
Near Privman

2
ฉันลองใช้ Safari 10.1 และให้ฉัน: XMLHttpRequest cannot load file:///<my_local_file>. Cross origin requests are only supported for HTTP.ดังนั้นข้อความเกี่ยวกับเบราว์เซอร์ Safari จากเธรดนี้จึงใช้ไม่ได้อีกต่อไป
Michal Cichon

233

การใช้--disable-web-securityสวิตช์ค่อนข้างอันตราย ! ทำไมต้องปิดการรักษาความปลอดภัยในขณะที่คุณสามารถอนุญาตให้ XMLHttpRequest เข้าถึงไฟล์จากไฟล์อื่นโดยใช้--allow-file-access-from-filesสวิตช์ได้

ก่อนใช้คำสั่งเหล่านี้อย่าลืมปิดอินสแตนซ์ของ Chrome ที่ทำงานอยู่ทั้งหมด

บน Windows:

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

บน Mac:

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

การสนทนาเกี่ยวกับ"คุณลักษณะ"ของ Chrome นี้:


5
เป็นไปได้ไหมที่จะทำให้สิ่งนี้เป็นพฤติกรรมเริ่มต้นโดยไม่ต้องเปิดเทอร์มินัล / บรรทัดคำสั่งหรือทางลัดที่กำหนดเองทุกครั้ง
Kokodoko

1
@Kokodoko ฉันคิดว่าไม่
Konstantin Smolyanin

2
@JoshH ฉันเห็นด้วยอย่างยิ่งว่าการใช้เว็บเซิร์ฟเวอร์ในพื้นที่สำหรับการพัฒนาเว็บไซต์นั้นดีกว่ามากจากนั้นเข้าถึงไฟล์ในเครื่องโดยตรงโดยเบราว์เซอร์ อย่างไรก็ตามมีการถามคำถามที่ถูกต้องและฉันเพิ่งตอบไป
Konstantin Smolyanin

13
ในกรณีที่มีคนอื่นกำลังจะลองสิ่งนี้: ธงนี้ไม่พร้อมใช้งาน / แก้ไขได้ในchrome://flags
Blaise

5
@pimvdb ฉันคิดว่าคุณควรทำเครื่องหมายที่นี่เป็นคำตอบที่ยอมรับ
chris-l

21

เวอร์ชัน Mac จากเทอร์มินัลรัน:

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

ฉันเห็นการโหวตลงหลายรายการที่นี่ คุณช่วยอธิบายสิ่งที่ผิดพลาดกับคำตอบของฉันได้ไหม
เน็ก

ตามที่คำตอบอื่น ๆ อธิบายไว้เราไม่ควรแนะนำให้ปิดการใช้งานการรักษาความปลอดภัยเว็บทั้งหมดเมื่อมีสวิตช์เฉพาะที่เปลี่ยนแปลงสิ่งนี้เพียงสิ่งเดียว
อยากรู้อยากเห็น

คงจะดีหากมีวิธีแก้ปัญหาที่ถาวรกว่านี้ อันนี้ถือว่าผู้ใช้รู้ล่วงหน้าและต้องเปิด Chrome ขึ้นมาใหม่
Michael Dunn

3

บน Ubuntu:

chromium-browser --disable-web-security

สำหรับรายละเอียดเพิ่มเติม / สวิตช์:

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

อ้างอิงจาก


ฉันคิดว่าการระบุไฟล์จะปลอดภัยกว่า `` google-chrome --allow-file-access-from-files ~ / foo '
Muhammed Moussa

นี่เป็นข้อมูลที่กว้างเล็กน้อยสำหรับกรณีการใช้งานเฉพาะ แต่อุปกรณ์ประกอบฉากสำหรับการแก้ปัญหาโดยไม่คำนึงถึง
Michael Dunn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.