Окно и среда выполнения
Окно и среда выполнения
Некоторые документы предполагают наличие браузерной среды — окно, местоположение, хранилище, события. Этот слой моделирует эти объекты в чистом Python, чтобы такие документы могли обрабатываться на сервере без браузера.
Объект Window
Window фиксирует среду, WindowEventLoop управляет обработкой её событий, а Screen, VisualViewport и BarProp моделируют состояние, связанное с отображением. BrowsingContext связывает окно с его документом.
Состояние навигации
Location и History моделируют адрес и историю сеанса; Navigator сообщает идентификацию среды, настраиваемую через set_default_user_agent().
События
Интерфейс EventTarget с семейством Event — CustomEvent, UIEvent, MouseEvent, KeyboardEvent, FocusEvent, InputEvent, PopStateEvent, HashChangeEvent, ErrorEvent — реализует стандартную отправку событий. AbortController и AbortSignal предоставляют возможность отмены.
Хранение и обмен сообщениями
Storage моделирует веб-хранилище ключ-значение. MessageChannel, MessagePort и BroadcastChannel охватывают передачу сообщений, с помощниками structured-clone (clone_value) за их спиной.
Наблюдатели и производительность
IntersectionObserver и ResizeObserver (с их типами записей) моделируют API наблюдения, тогда как Performance, PerformanceEntry и Console завершают набор скриптов служб выполнения, с которыми обычно работают.
Советы и передовые практики
- Трогайте этот слой только при обработке документов, действительно зависящих от состояния окружения — парсинг и стилизация никогда не требуют его.
- Используйте
set_default_user_agent(), когда нижестоящая логика ветвится по идентичностиNavigator. - Подключите
AbortSignalк длительной обработке для чистой отмены
Распространённые проблемы
| Проблема | Причина | Исправление |
|---|---|---|
| Скрипт ожидает глобальные переменные window | Документ написан для браузеров | Предоставьте слой среды Window |
| События никогда не срабатывают | Нет цикла событий, запускающего диспетчеризацию | Использовать WindowEventLoop |
| Ветвь, зависящая от User-agent, работает некорректно | Строка UA по умолчанию в действии | Устанавливается через set_default_user_agent() |
FAQ
Нужен ли Window для разбора HTML?
Нет — слой окружения необязателен; парсинг, CSSOM и раскладка независимы от него.
Какие типы событий моделируются?
Стандартный набор: UI, mouse, keyboard, focus, input, popstate, hashchange, error и пользовательские события, все они отправляются через EventTarget.
Является ли веб-хранилище постоянным?
Storage моделирует поверхность API для целей обработки; долговечность зависит от встраивающего приложения.
API Reference Сводка
| Класс/Метод | Описание: |
|---|---|
Window | Якорь среды просмотра |
Location | Состояние адреса |
History | История сеанса |
EventTarget | Интерфейс диспетчеризации событий |
AbortController | Контроллер отмены |
IntersectionObserver | Наблюдение за пересечением |
set_default_user_agent | Настроить идентичность Navigator |