跳转到内容
Docs

Astro

适用于@openrum/browser 0.1.2

Astro 在服务端生成 HTML,只在明确指定的位置发送 JavaScript。因此,@openrum/browser 必须放在客户端脚本或已激活的 Island 中,不能放在组件 frontmatter 里。

在布局中加入 <script> 是最简单的方式。Astro 会打包该脚本,并且只在浏览器中执行。

src/layouts/Base.astro
<html lang="zh-CN">
<body>
<slot />
<script>
import { init } from "@openrum/browser";
init({
dsn: import.meta.env.PUBLIC_OPENRUM_DSN,
environment: import.meta.env.MODE,
release: import.meta.env.PUBLIC_APP_RELEASE,
});
</script>
</body>
</html>

PUBLIC_ 前缀使变量可以在浏览器代码中读取。DSN 是浏览器公开凭据,只允许向一个项目追加事件。

已经存在客户端时,init() 会返回正在运行的实例;顶层 captureEvent() 和 setUser() 也使用这个实例。因此一个页面上的 Island 会进入同一会话。只负责上报的 Island 无需再次初始化:

import { captureEvent } from "@openrum/browser";
captureEvent("newsletter_subscribed", { attributes: { placement: "footer" } });

首次 init() 之前这些辅助函数不会排队,而是直接跳过。

静态 Astro 站点每次导航都会加载新文档,因此会形成新的页面浏览。启用 客户端路由 后,SDK 会观察 history.pushState;初始化脚本不会重复执行,无需额外保护。

场景 支持情况
SSR 或构建错误 不采集,Browser SDK 只观察浏览器
Astro endpoint 和 action 不直接采集;浏览器侧失败会表现为失败请求
路由模板 尚未记录,参见路由模式
Source Map 构建后按 Release 上传,参见 Source Map

Release Alpha · commit local