Дозволити 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на веб-сайті працює. (оф. не від google.com)
inf3rno

3
@JessamynSmith: Порядок відповідей змінюється, і прийнята відповідь також може змінюватися, тому краще відповісти на відповідь, ніж сказати щось на кшталт "відповідь нижче прийнятої відповіді". Використовуйте URL-адресу, до якої веде посилання "відповідь" відповіді.
Майкл Шепер

2
@MichaelScheper Ваш коментар дещо не має значення, враховуючи те, що я вставив фактичну команду, яка працювала. Однак, якщо є значення, включаючи посилання, я видалив і відправив репозицію. У сучасному Chrome помилки виглядають так: XMLHttpRequest не може завантажити файл: ///path/to/file/css/base.css. Перехресні запити на походження підтримуються лише для протокольних схем: http, даних, chrome, chrome-extension, https, chrome-extension-resource. Ця відповідь stackoverflow.com/a/4819114/1649165 працювала для мене, тобто запускайте chrome з командного рядка: chrome --allow-file-access-from-files
Jessamyn Smith

@JessamynSmith: Вибачте, ви вважали, що моя порада не має значення. Оскільки ви вважаєте, що конкретна відповідь є актуальною, я подумав, що ви, можливо, хочете підтвердити свій коментар у майбутньому. Моя помилка.
Майкл Шепер

Відповіді:


49

стартовий хром с --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. Pim - це розробник Windows, але все ще нічого не сказано про Windows.

1
Так, я в Windows, вибачте за це. Спробую це зараз, дякую. До речі, я запускаю Chrome завжди, коли мій комп’ютер увімкнено, тож чи є можливість дозволити запит між доменами лише з локальних файлів або лише на певній вкладці? Тому що таким чином я фактично не можу одночасно безпечно переглядати Інтернет ...
pimvdb

1
Щойно я завантажив останню версію Chromium, щоб мати окрему, небезпечну версію, яка працює для тестування, та "справжній", встановлений Chrome для безпечного перегляду в Інтернеті. І це працює, дякую!
pimvdb

@Tom - ви повинні мати змогу робити це на Mac із Safari, не змінюючи налаштувань, доки ви не використовуєте протокол "file: ///", а не " localhost "
поблизу 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
Чи можливо зробити це поведінкою за замовчуванням без необхідності щоразу відкривати термінал / командний рядок або спеціальний ярлик?
Кокодоко

1
@Kokodoko Я думаю, що ні.
Костянтин Смолянін

2
@JoshH Я повністю погоджуюся, що набагато краще використовувати локальний веб-сервер для розробки веб-сайтів, а потім отримувати доступ до локальних файлів безпосередньо браузером. Однак було задано точне запитання, і я щойно відповів на нього.
Костянтин Смолянін

13
Якщо хтось інший спробує це спробувати: цей прапор не доступний / модифікується вchrome://flags
Blaise,

5
@pimvdb Я думаю, ви повинні позначити цю як прийняту відповідь.
chris-l

21

Версія для Mac Від запуску терміналу:

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

Я бачу тут декілька голосів. Чи можете ви пояснити, що не так у моїй відповіді?
Нек

Як пояснюють інші відповіді, нерозумно пропонувати вимкнути всю безпеку в Інтернеті, коли існує певний комутатор, який змінює цю єдину річ.
цікаводанні

непогано було б мати більш постійне рішення. Це передбачає, що користувач знає заздалегідь, а також вимагає відновлення хрому.
Майкл Данн

3

На Ubuntu:

chromium-browser --disable-web-security

Детальніше / комутатори:

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

Посилання від


Я думаю, що вказівки файлів будуть більш безпечними `google-chrome --allow-file-access-from-files ~ / foo`
Мухаммед Муса

Це дещо широко для конкретного випадку використання. Але не залежно від рішення
Майкл Данн
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.