Describe the bug
Баг: gramax-cli v46 — --custom-css вызывает зависание браузера
Версия: 1.0.46
Компонент: статическая сборка (gramax-cli build --custom-css)
Статус: открыт
Описание
При использовании флага --custom-css gramax-cli v46 генерирует в HTML <script> с функцией loadAndMoveStyles. После инлайн-копирования CSS запускается MutationObserver:
function startObserving() {
var obs = new MutationObserver(function () {
ensureStyleLast(); // перемещает <style id="dynamic-styles"> в конец <head>
});
obs.observe(document.head, { childList: true });
setTimeout(function () { obs.disconnect(); }, 10000);
}
function ensureStyleLast() {
var style = document.getElementById("dynamic-styles");
if (document.head.lastElementChild !== style) {
document.head.appendChild(style); // ← мутация
}
}
Stacktrace / Markdown (Optional)
No response
Expected behavior (Optional)
Баг: gramax-cli v46 — --custom-css вызывает зависание браузера
Версия: 1.0.46
Компонент: статическая сборка (gramax-cli build --custom-css)
Статус: открыт
Описание
При использовании флага --custom-css gramax-cli v46 генерирует в HTML <script> с функцией loadAndMoveStyles. После инлайн-копирования CSS запускается MutationObserver:
function startObserving() {
var obs = new MutationObserver(function () {
ensureStyleLast(); // перемещает <style id="dynamic-styles"> в конец <head>
});
obs.observe(document.head, { childList: true });
setTimeout(function () { obs.disconnect(); }, 10000);
}
function ensureStyleLast() {
var style = document.getElementById("dynamic-styles");
if (document.head.lastElementChild !== style) {
document.head.appendChild(style); // ← мутация
}
}
ensureStyleLast вызывает appendChild при каждом добавлении стилей React/emotion в <head>. Это создаёт новую мутацию, повторно триггерящую observer. Возникает цикл, браузер зависает. Даже пустой portal.css воспроизводит проблему.
Воспроизведение
gramax-cli build --source . --destination ./build/html --custom-css portal.css
npx serve build/html
# открыть в браузере — страница не загружается
Ожидаемое поведение
Страница загружается, кастомные стили применены, браузер не зависает.
Workaround (реализован в inject-search.js)
На этапе пост-процессинга функция startObserving() заменяется на no-op:
function startObserving() {}
Describe the bug
Баг:
gramax-cli v46—--custom-cssвызывает зависание браузераВерсия: 1.0.46
Компонент: статическая сборка (
gramax-cli build --custom-css)Статус: открыт
Описание
При использовании флага
--custom-cssgramax-cli v46 генерирует в HTML<script>с функциейloadAndMoveStyles. После инлайн-копирования CSS запускается MutationObserver:Stacktrace / Markdown (Optional)
No response
Expected behavior (Optional)
Баг:
gramax-cli v46—--custom-cssвызывает зависание браузераВерсия: 1.0.46
Компонент: статическая сборка (
gramax-cli build --custom-css)Статус: открыт
Описание
При использовании флага
--custom-cssgramax-cli v46 генерирует в HTML<script>с функциейloadAndMoveStyles. После инлайн-копирования CSS запускается MutationObserver:ensureStyleLastвызываетappendChildпри каждом добавлении стилей React/emotion в<head>. Это создаёт новую мутацию, повторно триггерящую observer. Возникает цикл, браузер зависает. Даже пустойportal.cssвоспроизводит проблему.Воспроизведение
Ожидаемое поведение
Страница загружается, кастомные стили применены, браузер не зависает.
Workaround (реализован в
inject-search.js)На этапе пост-процессинга функция
startObserving()заменяется на no-op: