@elu-labs/analytics-browser

中文文档
1.412.4发布于 2026/11/01MITTypeScriptESM + CJS零依赖

ELU Analytics浏览器SDK。

中文使用文档
文档目录10 节
  1. 安装脚本
  2. NPM安装
  3. 自托管实例
  4. 初始化选项
  5. Web vital和可选的性能示例
  6. 识别用户和组织
  7. 同意及私隐
  8. 功能标志
  9. 其他常用操作
  10. 许可证

面向网络的ELU分析

捕获产品事件,将活动与用户和组织联系起来,进行评估 功能标志,并根据您的ELU隐私设置记录会话。

每个页面使用一种安装方法:ELU脚本或NPM客户端。都使用 你ELU 网站的关键. 将帐户凭证和服务器机密保存在浏览器之外 代码。

安装脚本

将Web代码片段从您的ELU集成设置复制到您的站点中 <head>. 保留提供的URL和站点密钥:

<script async src="https://elu.dev/v1/YOUR_SITE_KEY.js"></script>

该脚本为该站点初始化ELU。不要打电话 init(). 装载机后 运行过,使用过 window.elu:

window.elu?.capture('checkout_started', { source: 'pricing_page' })
window.elu?.identify('user_123', { plan: 'pro' })

脚本是异步加载的。可选链接可以防止出现错误 没有装载,但是 不排队呼叫. 把重要的早起电话接到 脚本的 load 事件,或者使用下面的NPM客户端。一旦加载器 创建 window.elu,状态改变调用可以等待SDK启动;getter可能 还回来 undefined.

NPM安装

安装软件包并使用ELU项目的Web设置中的站点密钥。

npm install @elu-labs/analytics-browser@latest

页面本身必须使用HTTPS,包括在本地开发期间。服务你的 使用受浏览器信任的证书的本地应用程序,或使用受信任的HTTPS 预览。初始化停留在HTTP localhost暂停;HTTPS集合 只有端点是不够的。

在您的同意管理器允许分析后,在浏览器代码中初始化一次; 并重用返回的客户端:

import { createEluClient } from '@elu-labs/analytics-browser'

const elu = createEluClient('YOUR_SITE_KEY')

elu.capture('checkout_started', { source: 'pricing_page' })

对于您自己域上的ELU集合实例,设置其HTTPS URL:

const elu = createEluClient('YOUR_SITE_KEY', {
    api_host: 'https://analytics.example.com',
})

实例必须提供站点配置和事件、标志和重播 配置授权的端点。它的记录器资产使用相同的基础 URL,除非你提供 assets_host. 云默认值不需要主机选项。两个 选项接受带有可选路径前缀的绝对HTTPS URL,例如 https://analytics.example.com/elu. 端点位于该前缀下; 凭据、查询、片段和不规则路径被拒绝。所选 在页面上第一次成功初始化客户端后,url不能更改。 被服务的配置不能将请求重定向到另一个源或外部 所选路径前缀。

自托管实例

有一个习惯 api_host,客户端不向任何ELU云原点发出请求;

请求ELU云自定义 api_host
网站配置 /sdk/v2/<key>/confighttps://elu.devapi_host
事件、标志和重播https://ingest.elu.devapi_host
录音机 /sdk/recorder/<sha256>.jshttps://assets.elu.devassets_host 或者 api_host
脚本存储模块https://elu.devassets_host 或者 api_host

如果记录器主机没有交付记录器,例如因为a 网络过滤器或内容安全策略仅阻止该主机,即客户端 从事件主机获取相同的文件一次 /static/elu-owned/sdk/recorder/<sha256>.js 下 https://ingest.elu.dev 或者 你的 api_host. 它的字节必须与固定的摘要匹配。

客户端使用elu拥有的存储来标识和同意。现有的ELU状态为 保留;没有它的访问者会在网站下获得一个新的身份 opt_out_capturing_by_default 和 respect_dnt 设置。早期SDK存储 和回滚同步不再受支持。

页面可以直接加载实例的脚本:

<script src="https://analytics.example.com/static/elu.js"></script>
<script>_eluSdk.init('YOUR_PROJECT_TOKEN', { api_host: 'https://analytics.example.com' })</script>

init 启动与代码片段相同的客户端并发布 window.elu 当 佩奇没有。它需要一个明确的 api_host 和一个HTTPS页面。这个 安装指南描述了页面选项、共享身份和同意。

当画布捕获打开时(页面的 session_recording.captureCanvas ?? 你的 实例的设置)并且该实例不隐藏图像和媒体, 记录器还发送画布像素作为回放帧。它启动了一个Web Worker 从一个 blob: URL,因此内容安全策略必须允许 worker-src blob: (或 script-src blob:)以及 connect-src 以你为例。没有它, 画布被忽略,重播的其余部分继续。创建了一个WebGL画布 录音开始前需要 preserveDrawingBuffer: createEluClient 为调用它之后创建的上下文提供它(除非翻页) Canvas(关闭),正如实例的安装代码段所做的那样,因此创建客户端 在你的地图或图表之前。

画布框架是图片,所以文本遮罩,输入遮罩和遮罩选择器 不适用于它们:绘制到画布中的文本被记录为像素,即使当 所有文本都被屏蔽。块规则,或隐藏图像和媒体,保留一个画布 不再重播。

当重放网络捕获打开时(该页的 capture_performance 和 session_recording.recordHeaders/recordBody ?? 实例的设置),记录器将添加 页面的资源和导航计时,以及选中的方法, 的状态、标题和正文 fetch 和 XMLHttpRequest 请求。凭证 头文件总是记录为 redacted;大,二进制和敏感的外观 主体被音符代替;对实例的请求永远不会被记录。 重播屏蔽不适用于这些行,并且 capture_network_requests 不能控制他们。

当控制台录音是在(页的) enable_recording_console_log ?? 你的 实例的设置),记录器也记录页面的设置 console.* 在重播中调用和未捕获的错误,如前面的脚本所做的: 每个条目最多保留其级别、堆栈跟踪和序列化的参数 十个2000个字符的字符串。控制台只在重播时打补丁 会话正在录制,并在会话停止时进行恢复。屏蔽设置不适用 控制台条目:无论文本规则是什么,都记录一个页面记录的内容 是为了之前的剧本。记录到控制台的DOM节点被记录为其 选择器路径,而不是它的标记,以及记录的输入、组合或键盘 事件不携带键入的文本,因此阻塞或屏蔽文本和输入值不携带 就这样留下这一页。页面的 enable_recording_console_log 决定: true 记录控制台,即使实例没有要求它, false 从不;省略,由实例的设置决定。相同的优先级,页 选择? ?项目拨款,适用于每个自动收集器,和一个 启用页面的一个运行时具有与授予的一个相同的屏蔽和边界。 重播从页面的完整快照开始,并在 每一次之后的第一次改变 session_recording.full_snapshot_interval_millis 的 活动,五分钟,除非书上另有说明。每个检查点开始一个 新的重播块,所以寻找土地在一个和一个玩家不能使用 渐进式的变化在下一个阶段又会变得完整。一大块不超过 5000个事件,不管它的字节大小。

包导出 createEluClient 和TypeScript类型 EluClient. ESM 和CommonJS的根导入。导入包则不会 初始化分析。只在浏览器中调用工厂,不要在呈现时调用 在服务器上。在组件框架中,为页面保留一个客户端 而不是在每次渲染或mount上创建一个。NPM客户端不创建 window.elu;保留返回的对象。

初始化选项

选项默认的行为
api_hostELU云您的实例的HTTPS URL,可选地带有路径前缀(https://example.com/elu),用于其事件、标志和重播。站点权威必须在其下发布端点。
assets_host实例起源,或用于云摄取起源的ELU云资产可选的单独HTTPS URL,可选的带有路径前缀,用于记录器资产。
capture_pageview'history_change'初始页面浏览量加上历史API和哈希路由的变化。 true 只捕获初始页面浏览量; false 禁用自动页面浏览量。
capture_pageleave'if_capture_pageview'$pageleave 在 pagehide,与左页的 $prev_pageview_* 持续时间和滚动值,由访问者在网站上加载的下一个页面提供。 'if_capture_pageview' 无论何时发送 capture_pageview 是在; true 总是; false 从来没有。
autocapturetrue根据站点策略和同意,启用自动交互捕获。对象也启用它,缩小到1.409.5 url_allowlist, url_ignorelist, dom_event_allowlist, element_allowlist, css_selector_allowlist 和 css_selector_ignorelist 列表; element_attribute_ignorelist 命名永远不会作为元素内容发送的属性。
capture_exceptions项目设置为ELU未处理的错误和承诺拒绝,与堆栈框架(脚本URL没有查询,函数,行,列)。 true 打开这一页, false 要走;省略,项目的 captureExceptions 决定谁的压制规则在授予时适用。每种异常类型都有速率限制,就像1.409.5包中一样(每10秒重新填充10个令牌;突发最多发送9个)。手册 captureException() 仍然可用,不受限制。
capture_copied_text你的实例 captureCopiedText集 true 用于 $copy_autocapture 当访问者复制或剪切时,您的实例是否授予复制的文本:所选文本(最多255个字符,卡片和社会安全号码删除)和 $copy_type. 集 false 无论你的情况如何,永远不要送出去;Unset,你的实例 captureCopiedText 决定。无论哪种方式,选择都是在实例的屏蔽和页面自己的重放屏蔽(session_recording的掩码和块选择器和类,以及 elu-mask 班):什么都不送 mask_all_text,对于选择退出的访问者,当从祖先元素或选择的任何部分复制的元素达到无捕获标记时,实例掩码或阻塞的元素,图像元素(img, picture, video),而您的实例阻塞图像,这是rrweb的默认值 rr-block 或者 rr-mask 类,或密码,隐藏或敏感命名字段,从任何表单字段(甚至在重播记录其值的地方),或从封闭的阴影树,嵌套在打开的或不,在每个浏览器中。只有页面显示的文本可以解释选择:一个携带表单字段的默认文本,一个关闭树的文本或隐藏文本不发送任何内容。如果选择太大而无法在20毫秒内判断,或者超过50,000个节点,则不发送任何内容,而是延迟复制。
capture_network_requeststrue集 false 停止报告获取/XHR请求。每个报告只携带方法、状态、时间和一个擦除路径——从不查询字符串、标题或正文。每页最多200页。
capture_performanceWeb vital和重放网络定时:项目在ELU中的设置采样关闭,除非在ELU中启用true 打开Web vital、重播网络定时、内存和长任务示例; false 把它们都关掉;省略,由项目决定。一个对象集合 web_vitals 和 network_timing (每人决定页码), web_vitals_allowed_metrics, memory 和 long_tasks 单独的;见下文。
capture_heatmaps项目在ELU中的热图设置true 或者 { flush_interval_milliseconds } (默认为5000)发送点击,愤怒点击,死点击和鼠标移动位置为 $$heatmap 在这一页; false 发送没有;省略,项目的 captureHeatmaps 决定。坐标。
enable_recording_console_log项目设置为ELU控制台录音回放。 true 记录该页上该页的控制台调用, false 从不;省略,项目的 captureConsole 决定。
disable_session_recordingfalsetrue 即使您的实例授予重播,也会在此页面上保持关闭重播。事件不受影响。没有办法把它重新打开。
session_recording{ full_snapshot_interval_millis: 300000 }full_snapshot_interval_millis:重放页面的完整快照之间的活动毫秒,保持在10秒到30分钟之间。 recordHeaders 和 recordBody 决定页面的重放网络标头和正文(true , false 要走;省略,项目的 captureNetwork); captureCanvas: { recordCanvas, canvasFps, canvasQuality } 在实例的遮罩内,以相同的方式决定画布像素,有界(每秒1到12帧,质量从0到1)。在实例掩码之上的页面掩码,只会更严格: maskAllInputs: true, maskInputOptions, maskTextSelector, maskTextClass, blockSelector, blockClass, ignoreClass, ignoreSelector. RegExp类是以精确的类形状读取的 /^(a|b)$/ 只有。其他成员被忽略。
mask_all_text你的实例 captureElementContenttrue 屏蔽重播中的每个文本节点,并将元素文本排除在交互事件之外,无论您的实例授予什么。 false 在您的实例的屏蔽范围内,无论您的实例是否授予它,都在该页的交互事件上发送元素文本(如果没有,则屏蔽所有文本);它永远不会揭开重播的面纱。省略,由你的实例决定。
mask_all_element_attributes你的实例 captureElementContenttrue 将元素属性排除在交互事件之外,无论您的实例授予什么。 false 为此页发送它们,无论您的实例是否授予它们 autocapture element_attribute_ignorelist. 省略,由你的实例决定。
loaded(client)无在本地启动之后和初始自动页面浏览之前运行。这并不意味着配置、标志或交付已经完成。没有等待异步回调。
before_send无一个函数,或一个按顺序调用的函数数组,在每个事件被排队之前运行: capture, captureException 自动事件也一样。它接收 { event, properties, $set?, $set_once?, timestamp },将已注册的超级属性合并到事件自己的超级属性下,并返回它,在适当位置编辑或替换,或 null 放弃事件;被移除的超级属性保持被移除状态。身份更改作为先前脚本为其发送的事件($identify 与 $set/$set_once, $set 与 properties.$set/$set_once, $create_alias, $groupidentify 与 properties.$group_set); null 丢掉零钱。抛出的钩子会丢弃带有一个控制台错误的事件。重放数据不通过它。
property_denylist[]从每个事件的属性(包括已注册的超级属性)中删除的属性名 sanitize_properties 和 before_send. 早先的脚本是 property_blacklist 仍然在它前面读取和合并。
sanitize_properties无弃用;使用 before_send. (properties, eventName) 返回要发送的属性;在否定者之后和之前运行 before_send.

脚本加载器选择它的启动选项;改变NPM选项则不然 配置脚本安装。重播和隐私设置来自ELU;一个 页面只能添加到它们。元素 elu-mask 类有 他们的文字被掩盖了, elu-no-capture 记录为 占位符和输入 elu-ignore-input 有 无论该实例的规则如何规定,他们的改变都被忽略了。一个 session_recording 成员,记录器不能支持精确类形状之外的RegExp类 /^(a|b)$/,一个选择器,它不进行解析或被未关闭的选项打开 注释、字符串、括号或括号或尾随的反斜杠)保持回放 在该页上关闭,而不是记录要求隐藏的内容,以及运行时 在控制台中为选项命名一次; maskTextFn 和 maskInputFn 不 运行时,他们将重写的内容被屏蔽如下。没有 set_config() 或在此客户机上覆盖每个请求端点:较早的 对于所针对的页面,返回对象接受脚本的名称 它, set_config() 被控制台警告忽略,并且 startSessionRecording() / stopSessionRecording() 切换这一页的记录器 在实例允许的范围内。看到 早期的脚本方法.

Web vital和可选的性能示例

当网页生命体征在(页面的) capture_performance ?? 你的ELU项目 captureWebVitals),每个页面都会报告其核心Web vital (LCP, FCP, CLS和INP,或项目列出的指标)作为一个或多个 $web_vitals 事件携带值,它们的评级和页面位置 只有。较早完成的指标会在短暂延迟后一起发送;CLS和 INP也会在页面可见时发送,每次它们发生变化,因为 一旦页面被隐藏,捕获就会停止。一页在隐藏时开始绘画 报告没有油漆时间。页面的选项决定两个方向: capture_performance: true 或者 { web_vitals: true } 即使在哪里也能打开它们 该项目并没有授予他们(每一个指标,缩小到 web_vitals_allowed_metrics), { web_vitals: false } 或者 capture_performance: false 关掉它们;省略,项目决定,和 web_vitals_allowed_metrics 缩小了它的度量。

当您的ELU站点配置和本地配置都不启用时,性能采样将关闭 初始化选项启用它。对于NPM客户端,你可以显式地选择:

const elu = createEluClient('YOUR_SITE_KEY', {
    capture_performance: {
        memory: true,
        long_tasks: true,
        sample_interval_ms: 30_000,
    },
})

TypeScript的选项类型是 PerformanceCaptureConfig. 每个本地设置 覆盖其远程对应; true 同时启用度量和 false 禁用两者,以及Web vital。一个 capture_performance 这就是价值 布尔值和对象都不能关闭样本。间隔默认为 30秒,最少5秒。 如果更新的站点配置省略了性能设置,则先前的远程 有选择地加入结束;显式本地覆盖仍然需要有效的捕获权限。

样本使用常态 $performance_sample 事件队列。记忆的测量 仅在浏览器公开堆统计信息时可用;长期任务 测量要求 PerformanceObserver 支持。不支持的测量 省略了。当页面被隐藏时,Collection会暂停并丢弃旧的 当身份、同意或捕获配置更改时测量窗口。 选择退出,阻止捕获和过期配置阻止采样。

关于隐藏或导航的最后一个示例是尽力而为的。浏览器生命周期和 同意检查仍然适用;关闭选项卡或进程可以阻止排队或 交付。此功能不保证卸载样例或进程死亡 复苏。

识别用户和组织

使用应用程序稳定的内部ID,而不是电子邮件地址、姓名或电话 号码。在登录后和相关自定义事件之前进行识别:

elu.identify('user_123', { plan: 'pro' }, { signup_source: 'website' })
elu.group('organization', 'org_456', { plan: 'pro' })
elu.capture('project_created', { template: 'blank' })

// On sign-out:
elu.reset()

第三个论点 identify 仅在不存在时设置person属性。使用 setPersonProperties 用于以后的更改。 group 关联后续活动 对于这种群体类型; resetGroups 清除组关联。

reset() 开始一个新的匿名身份,并清除超级属性,组 标志上下文。它保留了设备ID ($device_id),除非被称为 reset(true),并保留访客选择退出的权利。身份重置是 不同意恢复捕获;使用您的同意管理器来做出决定。

如果在任何SDK活动之前都需要征得同意,请等待加载脚本或调用 createEluClient 直到获得同意。初始化可以打开浏览器 存储和请求配置;之后选择退出不能撤销这些 最初的行动。

对于初始化的客户端:

elu.opt_out_capturing()

// Only when the visitor explicitly opts back in:
elu.opt_in_capturing({ captureEventName: false })

调用 opt_in_capturing() 没有选项也请求一个 $opt_in 事件。 选择退出抑制捕获,标志评估和重放。它不删除数据 已经交付给欧盟。

保存密码、付款详情、令牌及敏感个人资料 事件属性、id和异常消息。重播屏蔽无法进行消毒 任意自定义事件属性。

会话回放是为每个项目单独激活的。请联系ELU技术支持 它不可用;安装包不启用录音。重播 还需要同意,一个站点配置允许它,并符合条件 浏览器和会话。查看网站的输入、文本、图像和块化元素 设置在ELU;不要假设默认情况下所有可见的文本和图像都是屏蔽的。

在回放中掩蔽总是意味着保持长度 *. 遮罩文本节点保持 它是空格,并且所有其他字符都由 *,以及一个屏蔽输入 价值合二为一 * 每个字符,所以 Team settings 记录为 **** ******** 和7个字符的密码为 *******. 遮罩内容为 从来没有空白或掉落:重放保持页面的布局,没有任何 原始页除了它的长度。HTML注释总是隐藏在 同样的方式。阻塞是移除内容的单独规则:被阻塞的元素 被记录为相同大小的空占位符,并且被阻止的图像保持没有 src.

功能标志

标志异步加载。 undefined 指没有可用价值; 将其与显式函数分开处理 false:

const unsubscribe = elu.onFeatureFlags((_keys, _variants, context) => {
    if (context?.errorsLoading) return
    const enabled = elu.isFeatureEnabled('new_checkout', { defaultValue: false })
    // Render the new checkout only when enabled === true.
})

// When the component is disposed:
unsubscribe()

使用 getFeatureFlag 对于布尔或字符串变体, getFeatureFlagPayload 用于 它的JSON有效负载,或者 getFeatureFlagResult 用于 { key, enabled, variant, payload }. Flag读数可以报告暴露;通过 { send_event: false } 到一个 当您不想要曝光事件时,读取标志/特性。使用 reloadFeatureFlags() 请求新的值。特性标志不是 服务器端授权边界。

一旦一个求值被加载,每个事件都会携带它: $feature/<key> 与 每个被求值的标志的值和 $active_feature_flags 带着谁的钥匙 价值就是真理。它们是从加载的求值中派生出来的,从不存储为 超级属性 reset() 还有身份变更清除他们,直到 下一次评估落地;超级属性的改变(register, register_once, unregister)保存加载的求值,直到它自己的过期或 下一次求值无需新的请求,因此一次读取或一次事件在同一回合进行 仍然看到它;事件本身同名的属性获胜,而戳记获胜 符合捕获属性预算。 $feature_flag_called 也 命名它所报告的评价: $feature_flag_request_id, $feature_flag_evaluated_at (Unix纪元以来的毫秒数)和 $used_bootstrap_value,当值来自缓存的求值时,为true 而不是本页收到的回复。每个值报告一次 跨页面加载(分类帐为)的匿名访问者的标志键和值 保存在 localStorage 每个站点密钥,1.409.5包保留 $flag_call_reported): identify() 把它保存起来 reset() 开始新的生活。 每次更新配置时(最多5分钟)都会重新评估标志 分开)。

其他常用操作

elu.register({ app_area: 'dashboard' }) // Properties on later events
elu.register_once({ first_campaign: 'docs' })
elu.unregister('app_area')
elu.setPersonProperties({ plan: 'business' })
elu.captureException(new Error('Upload failed'), { operation: 'upload' })

capture() 不返回送货收据或承诺。确认与a的集成 ELU非敏感试验事件;只需下载脚本或返回方法即可 不能证明是摄入。

许可证

ELU的捐款可在 MIT许可证,包括 商业用途、修改和再分发。

第三方部分保留其原始的Apache-2.0、MIT或ISC术语 归因 THIRD_PARTY_NOTICES.txt. ELU的 麻省理工术语不能取代上游术语。包括 LICENSE, NOTICE-ELU, THIRD_PARTY_NOTICES.txt 在重新分配 SDK。发布的npm版本保留了包含在其存档中的术语。

版本与发布记录

@elu-labs/analytics-browser 共发布 18 个版本,首次发布于 2026/09/19;过去 12 个月发布了 18 个版本。

版本发布日期距今
1.412.4latest2026/11/012 天前
1.412.32026/10/313 天前
1.412.22026/10/313 天前
1.412.12026/10/313 天前
1.412.02026/10/268 天前
1.411.82026/10/1123 天前

其他发布通道:next → 1.411.1。

关于 @elu-labs/analytics-browser 的常见问题

@elu-labs/analytics-browser 是什么?

ELU Analytics浏览器SDK。

如何安装 @elu-labs/analytics-browser?

在项目目录运行 npm install @elu-labs/analytics-browser,或使用 pnpm add / yarn add / bun add。

@elu-labs/analytics-browser 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@elu-labs/analytics-browser 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@elu-labs/analytics-browser 可以商用吗?

@elu-labs/analytics-browser 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@elu-labs/analytics-browser 还在维护吗?

最新版本 1.412.4 发布于 2026/11/01(2 天前);至今共发布 18 个版本,其中过去 12 个月发布了 18 个;首次发布于 2026/09/19。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。