Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

halo-tracker.js 的统计方式问题 #7184

Open
3 tasks done
holwell opened this issue Jan 3, 2025 · 1 comment
Open
3 tasks done

halo-tracker.js 的统计方式问题 #7184

holwell opened this issue Jan 3, 2025 · 1 comment
Labels
area/core Issues or PRs related to the Halo Core kind/improvement Categorizes issue or PR as related to a improvement.

Comments

@holwell
Copy link

holwell commented Jan 3, 2025

前置条件

  • 已经在 Issues 列表中搜索了相关问题。
  • 这是和 Halo 相关的特性,如果是非项目本身的问题,建议在 Discussions 提交。
  • 如果是插件和主题特性建议,请在对应的插件和主题仓库提交。

你当前使用的版本

latest

描述一下此特性

首先我得说下我思考这个问题的场景,那就是主题适配 Pjax 的时候的,因为你们作为博客的开发者确实是可以忽略由 Pjax 适配带来的任何问题的,所以我特地先交代下背景,下面的建议只提供参考不做任何要求。
我看了下 halo-tracker.js 的混淆压缩代码,大抵是获取自身 script 标签上携带的一些属性和页面的其他参数,然后构造统计相关的请求方法,并把它绑定到 readystatechange 事件上。
其实上面说的具体实现都不重要,重要的是两个问题:

  1. 该请求方法被绑定在 readystatechange 事件上,且无法删除。
  2. 该请求方法的相关参数是固定的,无法更新。

这样的话,在 pjax 请求下,访问任何其他网页都会触发同样统计参数的同一个请求方法。所以,希望不要轻易的将固定统计参数的请求方法绑定到 readystatechange 或者 DOMContentLoaded 事件上,这可能不是优雅的做法。
对应的给出两个建议:

  1. 不绑定 readystatechange 事件,参考搜索/评论组件的做法,使用组件声明的形式来进行统计,直接用内联形式的 script 标签执行。(推荐)
  2. 仍然绑定 readystatechange 事件,但请求方法中的参数不能是静态固定的,而是动态的获取当前 script 标签上的属性、当前页面的参数。(最小改动,相对妥协)之所以要动态绑定,相当于向外暴露了这个统计接口,主题适配者可以去更改其上的统计参数,使其正常服务于 pjax 中。

附加信息

No response

@ruibaby
Copy link
Member

ruibaby commented Jan 20, 2025

/kind improvement
/area core

PR welcome:)

@f2c-ci-robot f2c-ci-robot bot added kind/improvement Categorizes issue or PR as related to a improvement. area/core Issues or PRs related to the Halo Core labels Jan 20, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area/core Issues or PRs related to the Halo Core kind/improvement Categorizes issue or PR as related to a improvement.
Projects
None yet
Development

No branches or pull requests

2 participants