Саймон Уиллисон описал трюк с document.currentScript: скрипт, который заменяет сам себя
Саймон Уиллисон в короткой заметке своего блога ссылок (17 октября 2026 года) обращает внимание на приём, который описал Lean Rada. Приём использует свойство document.currentScript: оно даёт скрипту доступ к самому себе, и поэтому крошечный встроенный элемент <script> может заменить себя результатом вычисления в момент загрузки страницы.
Базовый пример из заметки: в тексте стоит фраза «The year is» (то есть «Сейчас год»), а следом скрипт document.currentScript.replaceWith(new Date().getFullYear()). Когда страница загружается, скрипт подставляет на своё место текущий год, и в готовой странице от тега скрипта ничего не остаётся, только число.
Дальше идёт упрощение. Если заранее определить короткую функцию-сокращение $=(...n)=>document.currentScript.replaceWith(...n), то тот же пример записывается компактнее: <script>$(new Date().getFullYear())</script>. Уиллисон называет получившееся «крошечным языком шаблонов» (tiny template language): в любом месте разметки можно вставить маленький скрипт с вызовом $(...), и он подменит себя вычисленным значением.
Заметка короткая: автор не даёт собственных оценок, кроме определений «аккуратный трюк» и «крошечный язык шаблонов», а ссылки на оригинальную статью Lean Rada в извлечённом тексте нет.
Ключевые факты
- Приём использует свойство document.currentScript: встроенный <script> получает ссылку на самого себя.
- Скрипт вызывает replaceWith и при загрузке страницы заменяет сам себя результатом, например текущим годом: document.currentScript.replaceWith(new Date().getFullYear()).
- Если определить функцию $=(...n)=>document.currentScript.replaceWith(...n), запись сокращается до <script>$(new Date().getFullYear())</script>.
- Саймон Уиллисон называет это «крошечным языком шаблонов»; трюк описал Lean Rada, а Уиллисон дал на него ссылку 17 октября 2026 года.
Почему это важно
Это небольшая находка для веб-разработки, а не крупная новость. Её ценность в простоте: чтобы вставить в готовую страницу вычисляемое значение, например текущий год, достаточно одного встроенного скрипта и одной короткой функции, без отдельной системы шаблонов.
Кому это важно
Веб-разработчикам, которые собирают простые статические страницы и хотят подставлять в них небольшие динамические фрагменты прямо в разметке. Остальным читателям материал вряд ли пригодится.
Как это применить
В месте, где нужно значение, ставится <script> с вызовом document.currentScript.replaceWith(...), куда передаётся вычисляемое выражение, например new Date().getFullYear(). Чтобы не повторяться, один раз определяют сокращение $=(...n)=>document.currentScript.replaceWith(...n), после чего в разметке пишут <script>$(new Date().getFullYear())</script>.
Можно ли доверять
Это короткая заметка из блога ссылок Саймона Уиллисона, в которой он пересказывает чужой приём и приводит рабочие примеры кода. Ссылки на оригинальный текст Lean Rada в извлечённом материале нет, поэтому детали первоисточника здесь проверить нельзя.
Риски и подводные камни
В заметке не затрагиваются поддержка в браузерах, производительность, безопасность и политики защиты от внедрения скриптов (CSP). Ограничения момента выполнения скрипта указаны лишь в общем виде: он заменяет себя, когда страница загружается. Перед использованием в рабочем проекте эти вопросы нужно проверять отдельно.