Доступ к локальным файлам только для клиентского веб-сайта, который распространяется в виде HTML-загрузки, которую пользователь открывает в браузере. - PullRequest
0 голосов
/ 01 июня 2019

Из-за правил безопасности политики одного и того же происхождения (SOP) я не могу загрузить определенные локальные файлы при открытии индексного HTML-файла напрямую в браузере.Использование плагина "live-server" работает нормально, так как все файлы в этом случае находятся "на одном сервере ".Мне нужно распространять веб-сайт как клиентское приложение - папка и HTML-файл, которые будут открываться в вашем браузере.Решения проблемы всегда, кажется, требуют настройки сервера.Есть ли способ избежать этого и сохранить все на клиенте?

Я делаю электронную книгу по математике, которую хочу распространять на веб-сайте, который люди могут скачать.Я хочу, чтобы это было только для клиента и для загрузки, поскольку , если бы стало популярным, я бы не смог позволить себе запускать сервер (как я тогда учился).Я выбрал html и javascript вместо EPUB, так как они гораздо более мощные и допускают тонны интерактивности (и гораздо более эффективную разработку).

Пока у меня есть browser.html файл, который загружает отдельные страницы с помощью JQuery .load().Этот browser.html файл содержит как html, так и javascript.CSS находится во внешнем файле.На отдельных страницах есть много изображений, которые также хранятся локально на сервере.Поскольку страницы содержатся во вложенных папках, URL-адрес изображения переходит из в их родительскую папку и в assets , например: ../../../Assets/Chapter1/Talopgaver og intuition/Misc\F\solsystem.png.Я использую пользовательские элементы (shadow-DOM) для обработки различных сложных аспектов, таких как вопросы, ответы, а также некоторые другие вещи.Помимо JQuery, я также использую Math-Jax и «полимерную» библиотеку, которая помогает в кросс-браузерной поддержке пользовательских элементов.Все страницы в определенной главе загружаются в начале, а затем помещаются в массив (это позволяет быстро прокручивать страницы, как вы часто делаете в книгах).Они (как строки) немного модифицированы для автоматизации некоторых утомительных частей разработки.

Я пытался открыть файл browser.html в Chrome, Firefox, Internet-Explorer и Edge.Все они загружают HTML-код, который browser.html по своей сути содержит (даже в должном стиле), но ни один из них не загружает внешние страницы.Интересно, что одно из изображений, используемых в файле browser.html , все еще работает (я думаю, это тоже будет локальный файл, не так ли?).Если вы пытались отключить вызовы ajax или внешнего CSS, но ничего не изменилось.Я искал других людей с проблемами similair, но все ответы просто рекомендовали настроить сервер.

При загрузке страницы с помощью плагина live-сервера результат выглядит примерно так:

browser.html страница, открытая с " live-server"Плагин Visual Studio Code от Dey, Ritwick

При открытии страницы browser.html напрямую с помощью Chrome это выглядит так:

browser.html страница, открытая напрямую с Chrome

Ошибка, которую я получаю ( после после удаления вызова ajax .get()) isn 'особенно описательный: просто «Не удалось загрузить ресурс: net :: ERR_FILE_NOT_FOUND» из «platform.js: 1».Даже если отключить вызов, чтобы начать загрузку страниц, это дает мне точно такие же сообщения об ошибках.

Глядя на сетевые отчеты, с живым сервером выглядит очень обыденно. без это довольно странно.В нем говорится, что для загрузки browser.html требуются часы, хотя это явно не так.Не удалось загрузить platform.js после 22 секунд попытки.Отчет о сетях выглядит чуть более здоровым при отключении вызова для загрузки страниц.Он прекращает загрузку platform.js быстрее (8 секунд), но все еще предположительно занимает часы для загрузки browser.html.

Хотя в конечном счете это не должно быть необходимым, я связал весь документ browser.html ниже, а также пример страницы, которую он может загрузить (пример на первом рисунке выше).

browser.html .Слишком большой для кодового блока stackexchange embed

Страница на предыдущем изображении (стр. 37)

Любая помощь приветствуется!

РЕДАКТИРОВАТЬ: Основная проблема, кажется, загрузка страниц с использованием JQuery.load ().Даже на простом веб-сайте тестирования такая операция просто невозможна без запуска на сервере.

...