专栏名称: SegmentFault思否
SegmentFault (www.sf.gg)开发者社区,是中国年轻开发者喜爱的极客社区,我们为开发者提供最纯粹的技术交流和分享平台。
目录
相关文章推荐
码农翻身  ·  中国的大模型怎么突然间就领先了? ·  18 小时前  
程序员的那些事  ·  清华大学:DeepSeek + ... ·  3 天前  
程序员小灰  ·  3个令人惊艳的DeepSeek项目,诞生了! ·  2 天前  
OSC开源社区  ·  2024: 大模型背景下知识图谱的理性回归 ·  4 天前  
程序员的那些事  ·  成人玩偶 + ... ·  5 天前  
51好读  ›  专栏  ›  SegmentFault思否

使用 CSS 追踪用户

SegmentFault思否  · 公众号  · 程序员  · 2018-01-28 08:00

正文

原文地址:https://github.com/jbtronics/CrookedStyleSheets 文章作者:jbtronics(https://github.com/jbtronics/)

除了使用 JS 追踪用户,现在有人提出了还可以使用 CSS进行网页追踪和分析 ,译者认为,这种方式更为 优雅 ,更为 简洁 ,且 不好屏蔽 ,值得尝试一波,了解更多,可查看仓库地址(https://github.com/jbtronics/CrookedStyleSheets)和demo(http://crookedss.bplaced.net/)

我们可以用它来做什么

我们可以收集关于用户的一些基本信息,例如 屏幕分辨率 (当浏览器最大化时)以及用户使用的什么 浏览器 (引擎)。

此外,我们可以监测用户是否点击某个链接或鼠标悬停在某个元素上,用来 追踪用户悬停的链接 ,甚至可以 追踪用户如何移动鼠标 (在页面使用不可见的字段),然而,使用目前我的方法只能追踪用户的第一次点击或悬停,我相信,修改我的方法最终可以实现追踪用户的每次点击。

最后,我们还可以监测用户是否安装了某个特殊的字体,基于这个信息,我们可以追踪用户使用的 操作系统 ,因为不同操作系统使用的字体也稍有不同,例如 Windows Calibri

这又是如何实现的

普通的做法

CSS 你可以使用 url("foo.bar") 属性引用外部资源添加图像,有趣的是,这个资源只在需要的时候被加载(例如,当链接被点击时)。

所以,我们可以用 CSS 创建一个选择器,当用户点击某个链接时调用某个特定的 UPL

  1. #link2:active::after {

  2.  content: url('track.php?action=link2_clicked');

  3. }

服务端, php 脚本会在调用 URL 时保存时间戳。

浏览器监测

浏览器监 测是基于 @supportsMedia-Query 的,我们可以监测浏览器的一些特殊的属性。 ,例如 -webkit-appearance

  1. @supports (-webkit-appearance: none) {

  2.  #chrome_detect::after {

  3.    content: url('track.php?action=browser_chrome');

  4.  }

  5. }

字体监测

对于 字体监测 ,需要定义一个新的字体,如果一个字体存在,文本会尝试使用该字体进行样式设置,然而,当用户在系统上找不到该字体时,定义的字体会作为备用,在这种情况下,浏览器会尝试去加载定义的字体并在服务器上调用追踪脚本。

  1. /** Font detection **/

  2. @font-face {

  3.  font-family: Font1;

  4.  src: url('track.php?action=font1');

  5. }

  6. #font_detection1 {

  7.  font-family: Calibri, Font1;

  8. }

悬停监测

对于 悬停监测 (基于 jeyroik 的想法),我们需定义一个关键帧,每次使用这个关键帧都要去请求一个 URL。

  1. @keyframes pulsate {

  2.  0% {

  3.    background-image: url('track.php?duration=00');

  4.  }

  5.  20% {

  6.    background-image: url('track.php?duration=20');

  7.  }

  8.  40 % {

  9.    background-image: url('track.php?duration=40');

  10.  }

  11.  60% {

  12.    background-image: url('track.php?duration=60');

  13.  }

  14.  80% {

  15.    background-image: url('track.php?duration=80');

  16.  }

  17.  100% {

  18.    background-image: url('track.php?duration=100');

  19.  }

  20. }

然后,我们使用定义的关键帧创建动画,我们可以定义动画持续的时间,这也是我们测量的最大时间。

  1. #duration:hover::after {

  2.  -moz-animation: pulsate 5s infinite;

  3.  -webkit-animation: pulsate 5s infinite;

  4.  /*animation: pulsate 5s infinite;*/

  5.  animation-name: pulsate;

  6.  animation-duration: 10s;

  7.  content: url('track.php?duration=-1');

  8. }

我们可以通过补充关键帧的设置,来优化分辨率的监测。

输入监测

监测用户选中了某个复选框,我们可以使用 CSS 提供的 :selected 选择器。

  1. #checkbox:checked {

  2.  content: url('track.php?action=checkbox');

  3. }

为了监测字符串,我们结合了 HTML pattern







请到「今天看啥」查看全文