Skip to main content
HTMLRewriter 使用 CSS 选择器转换 HTML 文档。它支持 ResponsestringArrayBuffer 输入。Bun 的实现基于 Cloudflare 的 lol-html

用法

一个常见的用例是在 HTML 内容中重写 URL:
重写器会将每张图片替换为 Rick Astley 的缩略图,并将每个 <img> 包裹在链接中,生成如下差异:
现在点击任意图片都会跳转到一段非常著名的视频

输入类型

HTMLRewriter 可以转换多种输入类型的 HTML:
Cloudflare Workers 对 HTMLRewriter 的实现仅支持 Response 对象。

元素处理器

on(selector, handlers) 方法会为匹配 CSS 选择器的 HTML 元素注册处理器。解析过程中,每个匹配的元素都会运行这些处理器:
处理器可以是异步的,并返回一个 Promise。异步操作会阻塞转换,直到操作完成:

CSS 选择器支持

on() 方法支持丰富的 CSS 选择器:

元素操作

所有元素修改方法都会返回元素实例,因此可以链式调用:

文本操作

文本块表示文本内容的一部分,并报告其在文本节点中的位置:

注释操作

注释支持与文本节点类似的方法:

文档级处理器

onDocument(handlers) 方法会为文档级别的事件注册处理器,而不是针对特定元素内部的事件:

Response 处理

转换 Response 时:
  • 保留状态码、头部和其他响应属性
  • 转换 body,保持流式能力
  • 自动处理内容编码(如 gzip)
  • 转换后标记原始响应体为已使用
  • 头部被克隆到新响应上。

错误处理

HTMLRewriter 操作可能因多种情况抛出错误:
  • on() 方法中的选择器语法无效
  • 转换方法中的 HTML 内容无效
  • 处理 Response 正文时发生流错误
  • 内存分配失败
  • 输入类型无效(例如传入 Symbol)
  • 正文已使用错误
捕获并处理这些错误:

参考链接

你也可以阅读 Cloudflare 文档,该 API 旨在与之兼容。