🗒 Поговорим о document.currentScript

Есть интересное свойство у объекта document - currentScript, которое позволяет получить DOM-элемент , который в данный момент выполняется, и обратиться к его атрибутам.

<tg-emoji emoji-id="5213181173026533794">⚠️</tg-emoji>Но есть нюанс: это свойство не работает внутри модулей (<script type="module">), и в этом случае document.currentScript будет равен null.

document.currentScript идеально подходит для <i>embed-сценариев</i>, где:

<tg-emoji emoji-id="5316999259944398704">☑️</tg-emoji> конфиг хранится в атрибутах (через атрибуты data-*) <tg-emoji emoji-id="5316999259944398704">☑️</tg-emoji> скрипт нужно быстро вставить без лишнего кода <tg-emoji emoji-id="5316999259944398704">☑️</tg-emoji> важна самодостаточность и изоляция

Ну и рассмотрим примеры использования:

1️⃣ Подключение внешних виджетов / embeds

<code class="language-js"><script src="my-widget.js" data-theme="dark" data-user-id="123">

//my-widget.js const script = document.currentScript; const { theme, userId } = script.dataset;

initWidget({ theme, userId });

👆Получаем данные из атррибутов и передаем их, например, для инициализации виджита


2️⃣ Для аналитики и трекинга

`//tracker.js const { key } = document.currentScript.dataset; analytics.init(key);


3️⃣ Собственные виджеты / плагины

`//subscribe.js const { dataset } = document.currentScript; initSubscribeButton({ target: document.querySelector(dataset.target), style: dataset.style });

✍️Как итог

🔵Безопасно передаем параметры в скрипт без загрязнения глобальной области видимости 🔵Делает скрипты более переносимыми и самодостаточным 🔵Улучшает читаемость и поддержку``