![HTML并不简单:Web前端开发精进秘籍](https://wfqqreader-1252317822.image.myqcloud.com/cover/685/51089685/b_51089685.jpg)
2.1.4 看看ping属性的妙用
<a>元素还自带上报能力。只要设置了ping属性,当用户点击此链接元素的时候,浏览器就会自动发送一个POST请求给ping属性设置的地址。
例如,页面中有如下HTML代码:
![](https://epubservercos.yuewen.com/BADDE0/30121580904729906/epubprivate/OEBPS/Images/48048_29_2.jpg?sign=1739028270-YVgeHNDna285qPyQAhBtdtx6ukvU3YCk-0-fa2ee26ad817d90af4609819697f1e1a)
此时,点击“按钮1”和“按钮2”,浏览器就会给'/assets/example.jpg?...'地址发送POST请求。
有专门的演示页面,可以通过在浏览器中输入地址https://www.htmlapi.cn/2/1-6.html或扫码访问来体验。
![](https://epubservercos.yuewen.com/BADDE0/30121580904729906/epubprivate/OEBPS/Images/48048_29_3.jpg?sign=1739028270-y8m6lICnCPk4yBrFdelWtESermVgFMBn-0-94be3f095f1add880e5094c834c7edd0)
打开上述页面的控制台,切换到网络面板,然后点击页面中蓝色的按钮元素,如图2-6所示。
![](https://epubservercos.yuewen.com/BADDE0/30121580904729906/epubprivate/OEBPS/Images/48048_29_4.jpg?sign=1739028270-c9rsAAbY3B0pAAUQXfDZK0DBYBAzEJ4P-0-3db091466d55c02a94b9d860a94a92f7)
图2-6 按钮点击操作示意
此时就可以看到POST请求发出了,如图2-7所示。
![](https://epubservercos.yuewen.com/BADDE0/30121580904729906/epubprivate/OEBPS/Images/48048_29_5.jpg?sign=1739028270-W6pPAnlj964f9VTAJUQBM8ZSpsx6ZK9S-0-caa10e11c9db27def9f26594f9aa21f9)
图2-7 页面请求发出示意
因为图片无法接收POST请求,所以被服务器阻止了,实际开发中肯定会使用一个专门接收POST数据的地址。
虽然请求被阻止,但是请求头信息依然可见,重点关注图2-8所示的高亮部分。
![](https://epubservercos.yuewen.com/BADDE0/30121580904729906/epubprivate/OEBPS/Images/48048_30_1.jpg?sign=1739028270-GoD2UaWxCHlaN3HGqIwV0cNRiUAQSuoI-0-a547812d615d78088aaeaaaf052c6996)
图2-8 ping属性发出去的POST请求头信息
可以看到ping请求的content-type是text/ping,包含了用户的User-Agent、浏览器和操作系统信息、目标来源地址等信息,非常方便开发人员追踪收集的数据。
1.ping属性的优势
• 无须JavaScript代码参与,网页功能异常也能上报。
• 不受浏览器刷新、跳转或关闭的影响,也不会阻塞页面后续行为,这一点和navigator.sendBeacon()方法类似,可以保证数据上报的准确性。
• 支持跨域。
![](https://epubservercos.yuewen.com/BADDE0/30121580904729906/epubprivate/OEBPS/Images/48048_30_2.jpg?sign=1739028270-5qHBy6e8wKi1WogveOWeUIOkz3wCZymX-0-ce63847d95ce627282fd38c51b6a495c)
• 可上报大量数据,因为是POST请求。
• 语义明确,使用方便,灵活自主。
2.ping属性的劣势
• 只能支持点击行为的上报,如果是(重要元素)进入视区或者类似弹框显示的上报,则需要额外触发元素的click()行为。
• 只能支持<a>元素和<area>元素,在其他元素上设置ping属性没有作用,这就限制了其使用范围。
• 只能是POST请求,目前主流的数据统计还是基于日志中的GET请求,不能复用现有的数据采集与统计基建。
• “出身”不好,身为HTML属性,天然受某些开发者无视,难以得到有效传播。
• 属于新特性,IE浏览器并不支持。
3.适用的场景
ping属性上报有其独到之处,可以用在需要精确知道数据但不需要交互反馈的场景中。
例如,如果某作品列表页面需要显示被观看的次数,如图2-9所示,则特别适合使用ping属性,直接在列表的外面嵌套一层<a>元素,再将ping属性的值设为POST请求地址就可以。
![](https://epubservercos.yuewen.com/BADDE0/30121580904729906/epubprivate/OEBPS/Images/48048_31_1.jpg?sign=1739028270-AMRbLfAFZ0YSJ0l25kGKMgv2pRCsrwSh-0-c4ca814174855aabc4c3c71ae8544e93)
图2-9 某作品列表页面显示观看次数效果示意
无须额外使用JavaScript绑定点击事件并使用Fetch API发送POST请求,使用一个HTML属性就搞定了,例如:
![](https://epubservercos.yuewen.com/BADDE0/30121580904729906/epubprivate/OEBPS/Images/48048_31_2.jpg?sign=1739028270-jGItCeohptMti8l1wsQgCjXTzLWK9KMp-0-debe456258a84b07eef1f4069d2a871f)
![](https://epubservercos.yuewen.com/BADDE0/30121580904729906/epubprivate/OEBPS/Images/48048_32_1.jpg?sign=1739028270-1MyU0RhhbLvphQLHCSKAi79gZp2eILOv-0-cc1255b8e7006af6167a7cb9c6cfd121)
又如,需要快速进行AB测试的场景。
对于同样两张广告图,各自有50%的概率显示,分别预埋ping属性,然后处理POST请求,就能快速知道哪张广告图的点击效果好,无须专门负责大数据的同事帮忙,前端工程师自己就能搞定这件事情,比较容易出绩效。
这是低成本的杠杆技能之一,同时由于使用成本低,日后技术策略调整也会非常方便。
对于复杂的大规模的系统上报,ping属性方法并不合适,还是使用传统的JavaScript发送请求的方式吧。
总之,HTML提供了这样便捷的能力,能否活用相关技术并在项目中大放异彩,还要看个人的意识和技术嗅觉。