Я считаю, что основной причиной является то, что браузер не поддерживает асинхронные XHR для локальных файлов (file://
), как , упомянутое в MDN :
Некоторые браузеры (включая Chrome) не будут запускать асинхронные запросы (см. Выборка данных с сервера ), если вы просто запустите пример из локального файла. Это связано с ограничениями безопасности (подробнее о безопасности в сети читайте Безопасность сайта ).
По мере постепенного продвижения UI5 к асинхронности ( # UI5Evo ) и по соображениям безопасности следует избегать разработки приложений с протоколом file://
.
Вместо этого попробуйте настроить локальный HTTP-сервер , для которого существует множество инструментов, например Веб-сервер для Chrome . Запуск приложения на сервере также позволяет браузеру соблюдать CORS (нет необходимости отключать web-security ).
Обескураженный подход
Несмотря на то, что каркас не поддерживает протокол file://
, полагается на неподдерживаемый и глючный флаг командной строки , игнорирует стандарты безопасности и не уверен в том, что обходной путь может по-прежнему работать в будущем или нет, вы все равно можете запустить приложение с версией 1.54, если все запросы сделаны асинхронными. Например:
- Дано:
- Флаг командной строки Chrome
--disable-web-security --user-data-dir
- или
--allow-file-access-from-files
- Пример приложения UI5 , представленный в эквивалентном выпуске GitHub
Перед загрузкой файла sap-ui-core.js
активируйте скрытый экспериментальный флаг xx-async
.
<script>
window["sap-ui-config"] = {
"xx-async": true
}
<script>
И загружайте все остальное асинхронно, как обычно, например, предоставляя async: true
при создании ComponentContainer или корневое представление .
Обновление (2018/05/10)
Буквально вчера появился новый коммит , который пролил больше света на то, почему он не работал после обновления до 1.54 и почему вышеупомянутый обходной путь должен был везде использовать асинхронные XHR.
С версии 1.54 был представлен новый внутренний файл ui5loader.js . Помимо множества интересных функций, которые он принес, он также забрал в основном код из jquery.sap.global.js , который обрабатывал загрузку модулей. Во время миграции необходимо было применить запасной вариант синхронизации XHR для случая, когда используются устаревшие API синхронизации. Это было реализовано с помощью функции loadSyncXHR
.
В этой функции loadSyncXHR
модуль считался загруженным , когда возвращаемый статус XHR был 200
. Однако, как предполагает новая фиксация, некоторые браузеры, включая Chrome, возвращают статус 0
, когда файл был загружен из протокола file://
. Эта проверка отсутствовала до вчерашнего дня, поэтому ее нужно было добавить.
if ( xhr.status === 200 || <strong>xhr.status === 0</strong>)
Если вы запускаете тот же проект с src="https://openui5nightly.hana.ondemand.com/..."
без изменения кода, ошибки больше не должны появляться.