JS инъекция в профиле сотрудника Битрикс24

42
Золотое правило разработки под Битрикс24 заключается в том, что в первую очередь разработчик должен найти способ, который не затронет стандартный функционал коробки.

Задача: на личной странице сотрудника добавить блок, в котором обозначена отметка о том, что сотрудник вакцинировался

Рассмотрим пример js инъекции в профиль пользователя Битрикс24.

 BX.ready(function() {

    //region получаем Instance слайдера
    var currentWindow = top.window;

    if (top.BX.SidePanel && top.BX.SidePanel.Instance && top.BX.SidePanel.Instance.getTopSlider())
    {
        currentWindow = top.BX.SidePanel.Instance.getTopSlider().getWindow();

        //region подписываемся на событие,  когда контент слайдера загружен.
        BX.addCustomEvent(currentWindow, "SidePanel.Slider:onLoad", function (event) {

            let sliderObject = event.getSlider();

            //region ограничиваем код только для профлиля пользователя
            if (sliderObject.contentClassName === 'bitrix24-profile-slider-content') {

                let pageProfile = /\/company\/personal\/user\/(\d+)\//,
                    resURL = pageProfile.exec(sliderObject.url), // URL слайдера
                    userId = resURL[1], // получим ID пользователя
                    frameWindow = event.getSlider().getFrameWindow(); //объект слайдера

                if (frameWindow) {

                    //получаем необходимый элемент DOM
                    let insertNode = frameWindow.document.querySelector('.intranet-user-profile-column-left');

                    //если элемент найден, производим js инъекцию
                    if (insertNode) {
                        insertNode.appendChild(BX.create('DIV', {html: "Я вакцинировался"}));
                    }
                }

            }
            //endregion
        });
    }
    //endregion
});

Яндекс.Метрика