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 时:
  • 状态码、头部和其他响应属性被保留
  • 主体在被转换的同时保持流式处理能力
  • 内容编码(如 gzip)被自动处理
  • 原始响应主体在转换后被标记为已使用
  • 头部被克隆到新响应

错误处理

HTMLRewriter 操作在以下情况下可能会抛出错误:
  • on() 方法中的选择器语法无效
  • 转换方法中的 HTML 内容无效
  • 处理 Response 主体时的流错误
  • 内存分配失败
  • 无效的输入类型(例如,传递 Symbol)
  • 主体已使用错误
捕获并处理这些错误:

另请参阅

您还可以阅读 Cloudflare 文档,此 API 旨在与其兼容。