Использование jQuery.sap.includeScript(). Then() в HCP Firori Launchpad
Я пытаюсь включить googlemaps в sapui5
jQuery.sap.includeScript({
url: "https://maps.googleapis.com/maps/api/js?key=XXXX",
promisify: true
}).then(function() { ... } )
Это Promise отлично работает, когда я работаю в Hanatrial Webide, но когда я разверну его на облачной платформе Hana, он не работает. Это сообщение об ошибке дает мне:
InterceptService.js: 1 Uncaught (в обещании) TypeError: u.indexOf не является функцией (…) sap.ushell.cloudServices.interceptor.InterceptService._invokeFilters @ InterceptService.js: 1
jQuery.sap.includeScript @ InterceptService.js: 1
onAfterRendering @ Worklist.controller.js: 37
Поэтому я открываю InterceptService.js, фрагмент кода в библиотеке, которая вызвала эту ошибку
{if(u.indexOf('/sap/fiori/../../')>0){u=u.replace('/sap/fiori/../../','/');}
Я использую HCP Portal Service для создания платформы HCP Fiori Launchpad. Как это исправить? Что я сделал не так?
Большое спасибо!
2 ответа
Это действительно проблема InterceptorService
, который не поддерживает синтаксис includeScript
с объектом в качестве первого аргумента.
Я передал код решения команде внедрения службы портала HCP, и он будет исправлен в следующем выпуске.
Пока что вы можете достичь той же функциональности с помощью следующего обходного пути:
new Promise(function(fnResolve, fnReject) {
jQuery.sap.includeScript(
"https://maps.googleapis.com/maps/api/js?key=XXXX",
"mapsScriptId", fnResolve, fnReject
);
}).then(function() { ... } )
Посмотрите, как UI5 реализует это: https://github.com/SAP/openui5/blob/rel-1.38/src/sap.ui.core/src/jquery.sap.global.js#L4387-L4389
Похоже, что InterceptService пока не поддерживает новейшую подпись jQuery.sap.includeScript (где параметры предоставляются в объекте конфигурации, а не в качестве отдельных аргументов).
В середине срока InterceptService должен быть улучшен / исправлен. В краткосрочной перспективе вы можете вернуться к старой подписи jQuery.sap.includeScript (url, id, onload, onerror). К сожалению, нет способа получить Обещание со старой подписью.