Смена приложения в Fiori Launchpad (Hash change). Замена заголовка в Fiori Launchpad.
Привет!
Поделюсь опытом в реализации отслеживания смены приложений в Fiori Launchpad и замены заголовка окна и заголовка в Fiori Launchpad в зависимости от открытого приложения.
Отслеживание смены приложений в Fiori Launchpad (Hash change).
При переходе из одного приложения в другое иногда бывает необходимо отслеживать путь перемещения, целевую страницу и т. п.
На просторах интернета гуляет конструкция с HashChanger:
var oHashChanger = HashChanger.getInstance(); oHashChanger.init(); oHashChanger.attachEvent("hashSet", function(oEvent) { alert(oEvent.getParameter("newHash") + "," + oEvent.getParameter("oldHash")); }); |
Но у меня что-то не заработало. Поэтому реализовал другим способом:
window.addEventListener("hashchange", function(oEvent) { //var hash = oComp._getHashFromUrl(oEvent.newURL); //в IE так не работает var hash = oComp._getHashFromUrl(oEvent.srcElement.location.hash); }); |
где _getHashFromUrl это:
_getHashFromUrl: function(url) { var arr = url.split("#"); arr = arr[1].split("?"); return arr[0]; }, |
Каждый раз при смене приложения будет отрабатывать блок внутри addEventListener(«hashchange», function(oEvent), в котором мы получаем hash и можем по нему, например, сделать запрос в бэкенд и получить новый актуальный заголовок приложения.
Замена заголовка (title) в Fiori Launchpad.
Зайдем в Fiori Launchpad (https://sapui5.hana.ondemand.com/test-resources/sap/ui/demoapps/demokit/worklist/webapp/test/flpSandboxMockServer.html#Shell-home) и посмотрим на то, что мы будем пытаться менять.
Сам текст «Начальная страница» прописан в https://sapui5.hana.ondemand.com/resources/sap/ushell/renderers/fiori2/resources/resources_ru_RU.properties.
Можно поменять его в файле, но мы пойдем другим путем и будем его менять из плагина:
init: function() { var oComp = this; var rendererPromise = this._getRenderer(); //var rendererExt = sap.ushell.renderers.fiori2.RendererExtensions; jQuery.sap.includeStyleSheet("/sap/bc/ui5_ui5/sap/Z_OUR_APP/css/style.css"); rendererPromise.then(function(oRenderer) { //Получим хеш из url var sQueryString = window.location.href.toUpperCase(); var app = oComp._getHashFromUrl(sQueryString); //Получим модель с разными настройками шела oComp._oMdl = oRenderer.shellCtrl.getModel(); //Наш новый заголовок var str = "Новая начальная страница"; //Если загрузился Fiori Launchpad if (app === "SHELL-HOME") { //Заголовок Fiori Launchpad текущего окна oComp._oMdl.setProperty("/currentState/application/title", str); //Заголовок окна window.document.title = str; } //Поменяем заголовок в модели (там, где я его нашел :) ): oComp._oMdl.setProperty("/states/home/application/title", str); oComp._oMdl.setProperty("/states/blank-home/application/title", str); oComp._oMdl.setProperty("/states/embedded-home/application/title", str); oComp._oMdl.setProperty("/states/headerless-home/application/title", str); oComp._oMdl.setProperty("/states/merged-home/application/title", str); sap.ushell.resources.i18n.aPropertyFiles[0].mProperties["home_title"] = str; sap.ushell.resources.i18n.aPropertyFiles[0].mProperties["FlpSettings_entry_title"] = str; sap.ushell.resources.i18n.aPropertyFiles[0].mProperties["actionHomePage"] = str; sap.ushell.resources.i18n.aPropertyFiles[0].mProperties["homeBtn_tooltip"] = str; var userPref = oComp._oMdl.getProperty("/userPreferences/entries"); if ((userPref instanceof Array) && (userPref.length > 0)) { for (var i = 0; i < userPref.length; i++) { if (userPref[i].entryHelpID === "flpSettingsEntry") { userPref[i].title = str; } } } oComp._oMdl.refresh(true); //Поменяем заголовок в выпадающем меню: if (sap.ui.getCore().byId("shellNavigationMenu")) { sap.ui.getCore().byId("shellNavigationMenu").getItems()[0].setTitle(str); } //Если перешли на другое приложение, отслеживаем изменение хеша: window.addEventListener("hashchange", function(oEvent) { //var hash = oComp._getHashFromUrl(oEvent.newURL); //в IE так не работает var hash = oComp._getHashFromUrl(oEvent.srcElement.location.hash); if (hash.toUpperCase() === "SHELL-HOME") { window.document.title = str; oComp._oMdl.setProperty("/currentState/application/title", str); } sap.ushell.resources.i18n.aPropertyFiles[0].mProperties["home_title"] = str; sap.ushell.resources.i18n.aPropertyFiles[0].mProperties["FlpSettings_entry_title"] = str; sap.ushell.resources.i18n.aPropertyFiles[0].mProperties["actionHomePage"] = str; sap.ushell.resources.i18n.aPropertyFiles[0].mProperties["homeBtn_tooltip"] = str; }); }); }, |
Может вам пригодиться :).