npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

web-log-tracker

v3.0.2

Published

send user actions and app performance

Downloads

11

Readme

应用集成

探针集成

  • 预先配置,通过 CDN 引入自动创建探针
  • 通过 CDN 引入后手动创建探针

预先配置 引入后自动创建探针

将以下代码复制到所有业务代码引入的script标签之前(如果是混合APP,还需要放在cordova.js引入之后)

<script>!(function(c,b,d,a){c[a]||(c[a]={});c[a].config={"app_code":"应用编码XXX","product_code":"产品编码XXX"};var n=b.createElement("script");var tag=b.getElementsByTagName("script")[0];n.async=1;n.src=d;tag.parentNode.insertBefore(n,tag);})(window,document,"https://mic-open.mypaas.com.cn/web-log-tracker/v2/myWebLogTracker.min.js","__myWebLogTracker__");</script>

以上代码进行了以下两项操作:

  1. 创建了一个 script 元素,并从 https://mic-open.mypaas.com.cn/web-log-tracker/v2/myWebLogTracker.min.js 异步下载 myWebLogTracker JavaScript 库;

  2. 根据配置初始化全局 __myWebLogTracker__ 探针对象,后续可以通过该对象调用相应的 API;

该代码已经根据配置创建探针 __myWebLogTracker__ 全局对象,不需要重复创建;除app_code和product_code之外,还可以继续添加更多配置参数(详见探针配置)

手动引入/创建探针

  • CDN 应该在 head 标记顶部附近以及任何其他 JavaScript 或 css 标记之前添加代码;
<script src='https://mic-open.mypaas.com.cn/web-log-tracker/v2/myWebLogTracker.min.js'></script>

该脚本会在全局导出一个 myWebLogTracker 函数,可以通过该函数创建探针对象;

script 脚本不要异步加载,否则脚本还未加载完成就实例化探针会导致 myWebLogTracker 未定义错误

引入脚本后,可以手动创建探针,所有配置都可以根据环境或其他条件动态生成;

混合应用请确保创建探针代码添加在 cordova 脚本之后,探针需要根据 cordova 对象来确认是否为混合应用;

// 创建配置对象,详细配置参考『探针配置』
const options = {
  product_code: '产品编码XXX',
  app_code: '应用编码XXX',
  disabled: process.env.NODE_ENV === 'production' ? false : true,
};

// 创建探针
const tracker = myWebLogTracker(options)

探针创建完成后,相应的数据收集和日志上报会自动处理;

探针配置

探针的配置选项是在探针初始化时以参数的方式传递的,同时也提供相应的 API 动态的修改探针的配置。

配置选项

| 属性 | 类型 | 描述 | 是否必填 | 默认值| | --- | --- | --- | --- | --- | | product_code | string | 产品编码,用于隔离不同产品上报的数据 只能由小写英文字符, 下划线和数字组成 | 是 | | | app_code | string | 产品应用编码,用于隔离不同应用上报的数据 只能由小写英文字符, 下划线和数字组成 | 是 | | | tenant_code | string | SaaS应用中的租户编码 | 否 | | | user_account | string | 真实用户标识 | 否 | | | is_spa | boolean | 是否为单页应用功能 | 否 | true | | page_interval | int | 检测页面停留时间间隔(单位:ms),配置>0,则视为开启 | 否 | 1800000 | | disable_event_track | boolean | 禁用标准点击事件上报 | 否 | false | | disable_api_hook | boolean | 禁用应用内API请求上报 | 否 | false | | disable_error_track | boolean | 禁用全局JS错误拦截 | 否 | false | | disable_report_position | boolean | 禁用位置上报(只针对于混合应用) | 否 | false | | manual_report_page_load | boolean | 是否手动上报页面加载时间, 如果设置为 true, 则需要在页面加载完成后调用 reportLoaded API 上报 | 否 | false | | api_ignore_urls | array | 需要忽略上报API请求的域名,API请求上报开启时有效,支持正则表达式 | 否 | | | api_property_cb | function | 修正 API 事件上报中 api 属性(api 地址),参数为 API 地址,返回值为字符串 | 否 | null | | collect_tags | string/array | 定义需要手机事件的标签名称,如:['a','button'];默认为所有标签都收集 | 否 | 'all' | | collect_filter | function | 自定义元素过滤。函数接收事件源参数,返回boolean | 否 | | | log_content_attribute | string | 申明式日志属性名称,如:<a href="#" data-log="日志内容"></a> | 否 | data-log | | log_event_attribute | string | 自定义日志类型收集属性,如:<button data-event="提交报告"></button>(如需要与log_content_attribute同时使用,则必须处于同一元素) | 否 | data-event | | route_title_maps | object | 自定义页面 Title map,键为需要自定义页面 title 的路径(使用正则表达式匹配),值为上报的 Title | 否 | null | | debug | boolean | 是否开启调试模式;开启后则将日志输入到控制台 | 否 | false | | disabled | boolean | 是否禁用全部上报 | 否 | false |

log_event_attribute (自定义日志事件类型名称属性) 必须和期望得到的 log_content_attribute (自定义日志内容) 处于同一元素; 比如:

  options = {
     log_event_attribute: 'data-custom-event',
     log_content_attribute: 'data-custom-log',
  };
  
  // html 中
  <a data-custom-event='添加到购物车' data-custome-log='橘子' href='#'>橘子</a>

注册SaaS租户编码与真实用户标识

SaaS 的租户编码和真实用户标识一般需要用户登录后动态配置,探针对象提供了 registUser API 注册租户编码和真实用户标识。

  • WebLogTracker.registUser({ [key: 'tenant_code' | 'user_account']: string })

registUser 接收一个配置对象,代表需要注册的租户编码和真实用户标识;

// 可以在登录后注册

login().then(() => {
  // 使用天眼平台创建的探针对象为 __myWebLogTracker__,手动创建的探针对象调用相应的对象即可
  window.__myWebLogTracker__.registUser({
    tenant_code: 'SaaS应用租户编码',
    user_account: '真实用户标识'
  });
});

动态修改探针配置

探针创建完成后,有时需要动态修改探针的配置,可以使用探针对象的 modifyConfig API 动态修改探针的配置。

  • WebLogTracker.modifyConfig({ [key: string]: string | boolean | int | array })

modifyConfig 接收一个配置对象,代表需要修改的探针配置。

// 使用天眼平台创建的探针对象为 __myWebLogTracker__,手动创建的探针对象调用相应的对象即可

window.__myWebLogTracker__.modifyConfig({
  disabled: true,
});

可以动态修改的配置明细如下(具体含义参考上方的配置选项):

  • page_interval,
  • disable_event_track,
  • disable_api_hook,
  • disable_error_track,
  • collect_tags,
  • collect_filter,
  • log_content_attribute,
  • log_event_attribute,
  • api_ignore_urls,
  • disabled

主动上报日志和错误

探针在实例化后,会自动上报一些事件用来收集相应的数据,你也可以在需要的时候手动上报日志和错误事件,探针提供两个接口用于手动上报:report 以及 reportError

  • WebLogTracker.report(eventName, content)

report 接收两个参数:

eventName: 自定义事件名称,

content: 自定义事件内容对象,由于探针会自动获取对应的基本信息(page 信息, vendor 信息 etc.),只需要把对应的事件内容提供到 log 键即可

// 用户下单后发送下单事件

// 使用天眼平台创建的探针对象为 __myWebLogTracker__,手动创建的探针对象调用相应的对象即可
window.__myWebLogTracker__.report('用户下单', {
  log: 'PO123456789', // 自定义内容
});
  • WebLogTracker.reportError(content)

reportError 实际上是 report('error', content) 的简便写法,直接上报对应的错误消息到 error 事件;

// 使用天眼平台创建的探针对象为 __myWebLogTracker__,手动创建的探针对象调用相应的对象即可
window.__myWebLogTracker__.reportError('用户下单', {
  log: `Error Message: ${message}, file: ${filename}, line: ${lineNumber}` // 自定义错误消息内容
});

手动上报页面加载时间

探针自动收集的页面加载时间来源于 performance 对象,对于混合 APP 或一些复杂的异步加载页面来说,通过 performance 获取的页面加载时间不太准确,因此提供一个手动上报页面加载时间的 API.

  • WebLogTracker.reportLoaded()

当调用 reportLoaded 时,会以当前的时间戳来作为页面加载完成的时间。

// 手动上报的时间

document.addEventListener('deviceready', () => {
  // some code...

  window.__myWebLogTracker__.reportLoaded();
});

配置自定义页面 Title

如果需要自定义上报数据的 title 属性,需要在探针实例化提供 route_title_maps 配置。 route_title_maps 接收一个简单的 Javascript 对象,键名为页面的路径(不包含 host),键值为对应的 title。比如:

{
  '/login': '登录',
  '/products': '产品',
};

路径的匹配使用的是正则表达式测试,如果当前页面路径与某个配置的路径匹配成功,则会所用对应的 title 作为上报数据的 title 属性,如果没有匹配项,默认使用 document.title 属性;