Request、Response,以及 string。Bun 的实现基于 Cloudflare 的 lol-html。
用法
一个常见的使用场景是重写 HTML 内容中的 URL。以下示例将图片源和链接 URL 重写为 CDN 域名:<img> 包裹在一个链接中,生成的差异如下:
输入类型
HTMLRewriter 可以转换来自多种来源的 HTML。输入类型会被自动识别和处理:Response 对象。
元素处理器
on(selector, handlers) 方法让你为匹配 CSS 选择器的 HTML 元素注册处理器。解析时每个匹配元素都会调用对应处理器:
CSS 选择器支持
on() 方法支持丰富的 CSS 选择器:
元素操作
元素提供多种操作方法,所有修改方法返回元素实例以支持链式调用:文本操作
文本处理器提供文本操作方法,文本片段代表文本节点中一部分内容,并提供该部分的位置等信息:注释操作
注释处理器允许操作注释节点,方法与文本节点类似:文档级处理器
onDocument(handlers) 方法允许处理文档级事件,这些事件发生于文档层面,而不是特定元素内:
Response 处理
转换 Response 时:- 保留状态码、头部和其他响应属性
- 转换 body,保持流式能力
- 自动处理内容编码(如 gzip)
- 转换后标记原始响应体为已使用
- 头部被克隆到新响应上
错误处理
HTMLRewriter 操作可能因多种情况抛出错误:on()方法中的选择器语法无效- 转换方法中 HTML 内容无效
- 处理 Response 流时出现错误
- 内存分配失败
- 输入类型无效(例如传入 Symbol)
- 响应体已被使用错误