窗口和运行时环境

窗口和运行时环境

某些文档假设存在浏览环境——窗口、位置、存储、事件。此层在纯 Python 中对这些对象进行建模,从而可以在服务器端处理此类文档,而无需浏览器。


窗口对象

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 覆盖消息传递,并在其背后使用结构化克隆助手(clone_value)。

观察者与性能

IntersectionObserver 和 ResizeObserver(及其入口类型)对观察 API 进行建模,而 Performance、PerformanceEntry 和 Console 则补全了常用的运行时服务脚本。


提示与最佳实践

  • 仅在处理真正依赖环境状态的文档时才触及此层——解析和样式从不需要它。
  • 在下游逻辑根据 Navigator 身份进行分支时使用 set_default_user_agent()。
  • 将 AbortSignal 接入长时间运行的处理,以实现优雅的取消

常见问题

问题原因修复
脚本期望全局 window 对象文档面向浏览器编写提供 Window 环境层
事件从不触发没有事件循环驱动分发使用 WindowEventLoop
User-agent 依赖的分支表现异常默认 UA 字符串生效通过 set_default_user_agent() 设置

FAQ

解析 HTML 是否需要 Window?

不 — 环境层是可选的;解析、CSSOM 和布局与其无关。

哪些事件类型被建模?

标准系列:UI、鼠标、键盘、焦点、输入、popstate、hashchange、错误以及自定义事件,全部通过 EventTarget 派发。

Web 存储是持久化的吗?

Storage 为处理目的对 API 表面进行建模;持久化取决于嵌入的应用程序。


API Reference 摘要

类/方法描述
Window浏览环境锚点
Location地址状态
History会话历史
EventTarget事件分发接口
AbortController取消控制器
IntersectionObserver交叉观察
set_default_user_agent配置 Navigator 身份

另请参阅

 中文