JavaScript 上下文
JavaScript 上下文
脚本层为需要的文档提供受控的 JavaScript 评估上下文。它是有意基于策略的:模块解析是显式的,失败会以类型化异常的形式呈现。
评估上下文
JSContext 托管脚本评估。评估期间抛出的错误以 JSEvaluationError 形式呈现,使脚本失败与 Python 端错误区分开来。
模块加载
模块解析受 ModuleRegistry 监管,它将模块说明符映射到实现。缺失的模块会抛出 ModuleNotFoundError(库自定义的类型化错误),而不是静默返回存根。
加载策略
ModuleLoadPolicy 控制上下文允许加载的内容——这是在服务器端处理时对脚本行为进行沙箱化的机制,避免任意模块访问。
提示与最佳实践
- 仅注册处理场景所需的模块;小型注册表即是沙箱
- 将
JSEvaluationError与通用异常分开捕获,以区分脚本错误和管道错误 - 将
ModuleNotFoundError视为策略信号,而非致命条件——它通常表示输入期望一个您未提供的浏览器 API
常见问题
| 问题 | 原因 | 修复 |
|---|---|---|
ModuleNotFoundError 在评估时 | 模块未注册 | 将其添加到 ModuleRegistry 或调整策略 |
| 脚本失败导致流水线崩溃 | 未捕获 JSEvaluationError | 在评估边界处理它 |
| 意外的模块访问 | 策略过于宽松 | 收紧 ModuleLoadPolicy |
FAQ
解析是否需要脚本求值?
不——解析、CSSOM 和布局在没有任何脚本上下文的情况下也能工作。
我如何控制脚本可以导入什么?
通过 ModuleRegistry(已存在的)和 ModuleLoadPolicy(可能加载的)。
脚本错误如何呈现?
作为 JSEvaluationError 异常在 Python 端。
API Reference 摘要
| 类/方法 | 描述 |
|---|---|
JSContext | JavaScript 评估上下文 |
ModuleRegistry | 模块标识符注册表 |
ModuleLoadPolicy | 模块加载策略控制 |
JSEvaluationError | 类型化脚本评估失败 |
ModuleNotFoundError | 类型缺失模块失败 |