Cho phép Google Chrome sử dụng XMLHttpRequest để tải URL từ tệp cục bộ


125

Khi cố gắng thực hiện một yêu cầu HTTP bằng XMLHttpRequest từ một tệp cục bộ, về cơ bản nó không thành công do Access-Control-Allow-Originvi phạm.

Tuy nhiên, bản thân tôi đang sử dụng trang web cục bộ, vì vậy tôi tự hỏi liệu có cách nào để Google Chrome cho phép các yêu cầu này, từ một tệp cục bộ đến một URL trên Internet không.

Ví dụ, $.get('http://www.google.com/')thất bại khi thực thi trong một tệp cục bộ, nhưng tôi đã tự viết kịch bản trang và tôi đang sử dụng nó, vì vậy sẽ cực kỳ hữu ích nếu tôi có thể chặn nó và tải URL.

Vậy, làm cách nào tôi có thể cho phép Google Chrome tải URL bằng XMLHttpRequest từ các tệp cục bộ?


1
Access-Control-Allow-Origin: nullbởi các trang web hoạt động. (không phải bởi google.com)
inf3rno

3
@JessamynSmith: Thứ tự câu trả lời thay đổi và câu trả lời được chấp nhận cũng có thể thay đổi, vì vậy tốt hơn là liên kết đến một câu trả lời hơn là nói bất cứ điều gì như 'câu trả lời bên dưới câu trả lời được chấp nhận'. Sử dụng URL mà liên kết 'chia sẻ' câu trả lời dẫn đến.
Michael Scheper

2
@MichaelScheper Nhận xét của bạn có phần không liên quan do tôi đã dán vào lệnh thực tế đã hoạt động. Tuy nhiên, trong trường hợp có giá trị bao gồm liên kết, tôi đã xóa và hô hấp. Trong Chrome hiện đại, các lỗi trông giống như: XMLHttpRequest không thể tải tệp: ///path/to/file/css/base.css. Yêu cầu nguồn gốc chéo chỉ được hỗ trợ cho các sơ đồ giao thức: http, dữ liệu, chrome, chrome-extension, https, chrome-extension-resource. Câu trả lời này stackoverflow.com/a/4819114/1649165 đã làm việc cho tôi, tức là chạy chrome từ dòng lệnh: chrome --allow-file-access-from-files
Jessamyn Smith

@JessamynSmith: Xin lỗi bạn nghĩ rằng lời khuyên của tôi là không liên quan. Vì bạn nghĩ rằng một câu trả lời cụ thể có liên quan, tôi nghĩ bạn có thể muốn chứng minh tương lai của bạn. Lỗi của tôi.
Michael Scheper

Câu trả lời:


49

khởi động chrome với --disable-web-security

Trên Windows:

chrome.exe --disable-web-security

Trên máy Mac:

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

Điều này sẽ cho phép các yêu cầu tên miền chéo.
Tôi không biết nếu điều này cũng hoạt động cho các tệp cục bộ, nhưng hãy cho chúng tôi biết!

Và đề cập đến, điều này thực hiện chính xác những gì bạn mong đợi, nó vô hiệu hóa bảo mật web, vì vậy hãy cẩn thận với nó.


Bạn cũng có thể sử dụng Safari trên máy Mac. Nó cho phép AJAX vào các tệp cục bộ theo mặc định khi yêu cầu được thực hiện từ một tệp cục bộ. Ngoài ra, về '.exe', không có gì trong Q được nói về Windows. Pim là một nhà phát triển Windows, nhưng vẫn không có gì nói về Windows.

1
Có, tôi đang dùng Windows, xin lỗi về điều đó. Sẽ thử nó ngay bây giờ, cảm ơn. Nhân tiện, tôi luôn chạy Chrome khi máy tính bật, vậy có cách nào chỉ cho phép yêu cầu tên miền chéo với các tệp cục bộ hoặc chỉ trong một tab cụ thể không? Bởi vì theo cách này, tôi thực sự không thể duyệt Internet một cách an toàn cùng một lúc ...
pimvdb

1
Tôi vừa tải xuống bản dựng Chromium mới nhất để có phiên bản độc lập, không an toàn đang chạy để thử nghiệm và 'thực', đã cài đặt Chrome để duyệt Internet an toàn. Và nó hoạt động, cảm ơn!
pimvdb

@Tom - bạn sẽ có thể thực hiện việc này trên Mac bằng Safari, mà không cần thay đổi cài đặt, miễn là bạn sử dụng giao thức "file: ///" chứ không phải " localhost "
Gần Privman

2
Tôi đã thử nó trên Safari 10.1 và nó đã cho tôi: XMLHttpRequest cannot load file:///<my_local_file>. Cross origin requests are only supported for HTTP.vì vậy tuyên bố về trình duyệt Safari từ chuỗi này không còn hợp lệ.
Michal Cichon

233

Sử dụng --disable-web-securitycông tắc khá nguy hiểm ! Tại sao lại vô hiệu hóa bảo mật trong khi bạn chỉ có thể cho phép XMLHttpRequest truy cập các tệp từ các tệp khác bằng cách sử dụng --allow-file-access-from-fileschuyển đổi?

Trước khi sử dụng các lệnh này, hãy đảm bảo kết thúc tất cả các phiên bản đang chạy của Chrome.

Trên Windows:

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

Trên máy Mac:

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

Thảo luận về "tính năng" này của Chrome:


5
Có thể thực hiện điều này thành hành vi mặc định mà không cần phải mở một dòng thiết bị đầu cuối / lệnh hoặc một phím tắt tùy chỉnh mỗi lần?
Kokodoko

1
@Kokodoko Tôi nghĩ là không.
Konstantin Smolyanin

2
@JoshH Tôi hoàn toàn đồng ý rằng sử dụng máy chủ web cục bộ để phát triển trang web sau đó truy cập các tệp cục bộ trực tiếp bằng trình duyệt. Tuy nhiên, câu hỏi chính xác đã được hỏi và tôi vừa trả lời nó.
Konstantin Smolyanin

13
Trong trường hợp người khác sẽ thử điều này: cờ này không có sẵn / có thể sửa đổi trongchrome://flags
Blaise

5
@pimvdb Tôi nghĩ bạn nên đánh dấu câu này là câu trả lời được chấp nhận.
chris-l

21

Phiên bản Mac. Từ thiết bị đầu cuối chạy:

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

Tôi thấy một số phiếu giảm ở đây. Bạn có thể giải thích những gì sai với câu trả lời của tôi?
Nek

Như các câu trả lời khác giải thích, sẽ không khôn ngoan khi đề xuất vô hiệu hóa tất cả bảo mật web khi có một công tắc cụ thể thay đổi điều này.
tò mò

nó sẽ là tốt đẹp để có một giải pháp lâu dài hơn. Điều này giả định rằng người dùng biết trước và cũng yêu cầu khởi chạy lại chrome.
Michael Dunn

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.