Начальная загрузка приложения SAPUI5 локально выдает ошибку после обновления ресурсов UI5 до 1.54 - PullRequest
0 голосов
/ 08 мая 2018

Локальные приложения SAPUI5 больше не работают с 1.54.xxx. Они прекрасно работают с 1.52.xxx.

Под «локальными приложениями SAPUI5» я подразумеваю приложения:

  • загружено с локального диска без http-сервера
  • с использованием CDN
  • с использованием браузера с отключенным SOP, как Chrome с - отключить веб-безопасность --user-data-dir

Такое приложение отлично работает с 1.52.xxx:

src="https://openui5.hana.ondemand.com/1.52.11/resources/sap-ui-core.js"

но выдает дамп с ошибкой из ui5loader-dbg.js с 1.54.xxx:

src="https://openui5.hana.ondemand.com/1.54.4/resources/sap-ui-core.js"

Ошибка возникает при загрузке Components.js или контроллеров, сэмплов из двух программ:

ui5loader-dbg.js: 882 Uncaught Ошибка: не удалось загрузить zprog / Component.js из ./Component.js
ui5loader-dbg.js: 882 Uncaught Ошибка: не удалось загрузить ztest2 / controller / App.controller.js из ./controller/App.controller.js: 0 -

Вы знаете причину этого и знаете, как запустить локальное приложение SAPUI5 с 1,54?

1 Ответ

0 голосов
/ 09 мая 2018

Я считаю, что основной причиной является то, что браузер не поддерживает асинхронные 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 или корневое представление .

    Workaround working


Обновление (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/..." без изменения кода, ошибки больше не должны появляться.

...