inert 与背景隔离
inert 与背景隔离
机制拆解
本节从一个可观察问题开始:为什么同一段浏览器代码在不同输入、时序或宿主条件下会产生不同结果?先区分平台保证、实现策略和业务约定,再沿输入 → 中间状态 → 输出建立因果链。inert 与背景隔离
js
main.inert = true上面的最小例子不是完整产品。运行时先记录初始状态、触发动作、回调顺序和最终状态;再只改变一个变量,例如取消请求、移动节点、关闭标签页、切换键盘输入或让 API 失败。这样能判断问题来自事件路径、资源所有权、序列化、权限还是渲染调度。
边界与失败路径
- 所有权:监听器、observer、worker、连接、缓存和焦点都有创建者与释放时机;页面隐藏、路由离开和元素移除时都要验证。
- 宿主差异:SSR、Web Worker、Shadow DOM、跨文档、跨源和辅助技术不会共享同一套全局对象与事件路径。
- 错误分类:取消、超时、权限拒绝、协议错误、配额不足和浏览器不支持应分别进入可观察状态。
- 安全边界:用户输入、URL、HTML、消息和持久化数据不能仅因为来自同源或类型正确就视为可信。
可运行实验
打开原生 dialog,检查模态焦点、Escape 关闭和返回触发按钮;比较 show 与 showModal,并测试触发按钮被移除时的后备焦点。
实验记录要包含浏览器版本、设备/网络条件、操作步骤、预期输出、实际日志和未覆盖的兼容差异;没有真实浏览器能力时,只把静态语法检查写成已验证。
练习
- 按本节实验记录成功、失败、取消/卸载和降级四条路径,每条路径写出可观察断言。
- 改变一个输入、时序或宿主条件,解释哪条因果边发生变化,并引用实验日志。
- 选择一个替代 API 或降级方案,说明它的适用约束和牺牲。
下一步
完成练习后回到本章概览,按下一篇继续;遇到跨章节故障,先回到本节的所有权与宿主边界。