Проводка с локального веб-сайта html / javascript в онлайн-файл PHP

То, что я пытаюсь сделать

Сообщение с локального веб-сайта html / javascript в онлайн-файл PHP.

проблема

Когда я пытаюсь использовать мой код ниже, я продолжаю получать приведенную ниже ошибку.

Задний план:

Этот веб-сайт предназначен для работы на местном уровне. Поскольку каждый пользователь выбирает, какой браузер он использует, я ищу, чтобы найти подход, который мог бы решить вышеизложенное, не изменяя модификацию политики браузера для каждого пользователя.

Возможно ли это, если да, то как?

Код Javascript:

$.ajax({ type: 'POST', url: 'http://example.com/test.php', crossDomain: true, data: "my_request_is=foo", dataType: 'json', success: function(responseData, textStatus, jqXHR) { console.log(responseData); }, error: function (responseData, textStatus, errorThrown) { console.warn(responseData, textStatus, errorThrown); alert('CORS failed - ' + textStatus); } }); 

Код Php (test.php):

 <?php header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: POST, GET, OPTIONS'); header('Access-Control-Max-Age: 1000'); header('Access-Control-Allow-Headers: Content-Type'); echo json_encode(array("your_request_was" => $_POST['my_request_is'])); ?> 

Ошибка:

Изображение ошибки

По умолчанию запросы перекрестного происхождения не разрешены в chrome, chromium from file: protocol. Вы можете закрыть открытые экземпляры chrome, chromium и launch с --disable-web-security

 google-chrome --disabled-web-security 

или запуск с существующими экземплярами открыт, установив другой user-data-dir

 google-chrome --disable-web-security --user-data-dir="~/.config/google-chrome-temp" 

есть ли подход, который мог бы выполнить то, что мне нужно сделать, не требуя от меня изменения политик локальных веб-браузеров?

Не на хром, хром без изменения настроек по умолчанию; или создание расширения хрома или приложения для выполнения сетевых запросов – там, где также необходимо установить правильные permissions .

Это ограничение существует для определенной цели. Одна из нескольких проблем безопасности заключается в том, что пользователь на локальном компьютере может, возможно, неосознанно, загрузить список всех файлов в одном или нескольких каталогах на своем компьютере, и, возможно, сами каталоги, не обязательно осознавая этот факт, см.

Как работает FileReader.readAsText в API файлов HTML5?

который; примечание, также может происходить без установки флажков. Или запрошенный скрипт мог выполнять действия для чтения или записи в локальную файловую систему, не зная, что их локальная файловая система обращается к внешнему скрипту.

Хотя с ограничениями на месте пользователь должен выполнить утвердительные действия, чтобы отключить настройки по умолчанию, ограничивающие доступ к локальной файловой системе из file: протокол и ограничение локальной файловой системы для извлечения ресурсов из null origin в другое происхождение.

Как отметил @StefanoBalzarotti

извините, если я суетливый, но это ограничение не связано с протоколом «file:», даже с «data:», «about:» и т. д. … вы не можете сделать запрос на перекрестный поиск. Требование сделать запрос на перекрестный поиск состоит в том, чтобы иметь хост для происхождения

которые следует учитывать в отношении причин, по которым разработчики браузеров будут применять такое ограничение по умолчанию для запроса на перекрестный поиск.

Используются экономно и с осознанием значимости флагов, флаги --disable-web-security и --allow-file-access-from-files , см.

  • Как сделать флаг Google Chrome «-allow-file-access-from-files» постоянным?

  • Список переключателей командной строки Chromium

предназначены для локальной веб-разработки, а не как обходное решение для локального приложения, которое требует ресурсов из веб-приложения.

--disable-web-security Не применяйте политику одинакового происхождения. (Используется людьми, проверяющими их сайты.)

--allow-file-access-from-files По умолчанию файлы: // URI не могут читать другие файлы: // URI. Это переопределение для разработчиков, которым требуется старое поведение для тестирования.

Термин «тестирование» в описании флагов должен обеспечивать акцент на использовании флагов. Флаги не предназначены для использования в производстве.


Альтернативы,

  • Создайте расширение хрома для выполнения сетевых задач;

  • Создайте приложение Chrome для выполнения сетевых задач

где либо требуются правильные настройки permissions в manifest.json .

Из-за настроек безопасности chrome для создания XMLHttpRequest вам необходимо иметь действительное происхождение и действительное место назначения.
Место назначения является допустимым доменом, и поскольку у вас включен доступ к Access-Control-Allow-Origin, вы можете сделать запрос из разных источников.
Но источник не является допустимым доменом, потому что вы делаете запрос с локальной страницы.
Происхождение должно быть допустимым хостом / идентификатором (домен для веб-сайта, идентификатор расширения браузера, идентификатор приложения для веб-просмотра, встроенного в приложение).

У вас есть возможность решить проблему:

  • Храните свою страницу на хосте, это тоже хороший локальный хост, вы можете создать установку для автоматического развертывания хоста и веб-страницы для своих клиентов
  • отключить настройки безопасности браузера: образец для хром:

    chromium-browser –disable-web-security –user-data-dir

    проверьте этот ответ, как использовать: https://stackoverflow.com/a/3177718/5081328

  • встройте свою страницу в приложение и используйте веб-просмотр

  • Создайте расширение браузера, чтобы загрузить свою страницу.