ai-seo-analyzer / docs /HF_SES_AND_UI.md
lsdf's picture
Optimizer: SSE log panel + static app.js (SES-safe nv), no global loader; HF_SES doc
6b11536

Почему на Hugging Face «умирали» все кнопки (версии с прогресс-баром)

По фактам из консоли (не гипотезы):

1. SES_UNCAUGHT_EXCEPTION: SyntaxError: missing : in conditional expression

На странице Space подключается SES lockdown (lockdown-install.js). Его парсер/конвейер для кода страницы не эквивалентен последнему движку Firefox/Chrome в части синтаксиса ES2020+.

  • Операторы ?? (nullish coalescing) и ?. (optional chaining) в одном исходнике с большим inline-<script> давали ошибку разбора, интерпретируемую как сломанный тернарный ? … :missing ':'.
  • После этой ошибки весь клиентский скрипт приложения не выполняется → не регистрируются ни onclick, ни делегирование data-app-action → кажется, что «сломались все кнопки».

Исправление: не использовать ?? / ?. в коде приложения; вместо них — функция nv(v, d) и проверки obj && obj.prop.

2. Глобальный #loader

Если на время оптимизатора включать полноэкранный оверлей и по какой-то причине не снять display в finally, все клики уходят в оверлей. Это уже не SES, а логика UI.

Исправление: во время LLM-оптимизации не трогать #loader; прогресс только в локальной панели под кнопками.

3. Строки CSP про inpage.js, Stripe, content.js

В логе часто идут расширения браузера и iframe HF, а не ваш index.html. На диагностику кнопок приложения они обычно не влияют.

Текущая схема (после правок)

  • Логика UI в /static/js/app.js (отдельный файл, не гигантский inline).
  • Прогресс оптимизатора: панель с <pre>-логом + тонкая полоса; без блокировки всего экрана.
  • Поток /api/v1/optimizer/run-stream (SSE) + /api/v1/optimizer/cancel для остановки с частичным результатом.