![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=1738865107-qELvzC1mAjzcZvSpSpKFkDRl2cxakY17-0-c84b5a799695a8dbad20c7217338a910)
此时,点击“按钮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=1738865107-bNLhZxjZN5xwuEl2iBzQ6iOk0agEjVFe-0-346276514a5d5fc11f5b52aa4a83cbfb)
打开上述页面的控制台,切换到网络面板,然后点击页面中蓝色的按钮元素,如图2-6所示。
![](https://epubservercos.yuewen.com/BADDE0/30121580904729906/epubprivate/OEBPS/Images/48048_29_4.jpg?sign=1738865107-18zgUFkwEgXwHZpO3WjGsmQtSgus7Wvg-0-53a228236ffbdf7ed3f04b1c42ce1b70)
图2-6 按钮点击操作示意
此时就可以看到POST请求发出了,如图2-7所示。
![](https://epubservercos.yuewen.com/BADDE0/30121580904729906/epubprivate/OEBPS/Images/48048_29_5.jpg?sign=1738865107-o8dAzVF1ZDMC51UyFfQHESNDKypeP8bw-0-c988bda70871d8dfe42752d164d26476)
图2-7 页面请求发出示意
因为图片无法接收POST请求,所以被服务器阻止了,实际开发中肯定会使用一个专门接收POST数据的地址。
虽然请求被阻止,但是请求头信息依然可见,重点关注图2-8所示的高亮部分。
![](https://epubservercos.yuewen.com/BADDE0/30121580904729906/epubprivate/OEBPS/Images/48048_30_1.jpg?sign=1738865107-SBUvIsqZW5l9lXq2RIpaG2s4YNXTjaoL-0-166fca14f756625c5718341f935cb7ea)
图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=1738865107-vhjgffdz6gdZoJ2FWMVTRo4TsTvJGyqY-0-c621b948795022d5e2f39480768eb9e7)
• 可上报大量数据,因为是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=1738865107-orE7OVP8F2z0CziJQbC4lCo5V7b11Koa-0-b0f79dd18c47821f1688897dbc3698a9)
图2-9 某作品列表页面显示观看次数效果示意
无须额外使用JavaScript绑定点击事件并使用Fetch API发送POST请求,使用一个HTML属性就搞定了,例如:
![](https://epubservercos.yuewen.com/BADDE0/30121580904729906/epubprivate/OEBPS/Images/48048_31_2.jpg?sign=1738865107-wH2yqzJZgMfDJ6xter7NFlF4W15cxY3Z-0-b3fc34d0a4c3fbd7fd67edc1d7f52a8e)
![](https://epubservercos.yuewen.com/BADDE0/30121580904729906/epubprivate/OEBPS/Images/48048_32_1.jpg?sign=1738865107-HHiwCVwa53Vgy8KB2PerWBg3vOVrQPBj-0-c74c15c04ea997f1839ff2cb3ecc433d)
又如,需要快速进行AB测试的场景。
对于同样两张广告图,各自有50%的概率显示,分别预埋ping属性,然后处理POST请求,就能快速知道哪张广告图的点击效果好,无须专门负责大数据的同事帮忙,前端工程师自己就能搞定这件事情,比较容易出绩效。
这是低成本的杠杆技能之一,同时由于使用成本低,日后技术策略调整也会非常方便。
对于复杂的大规模的系统上报,ping属性方法并不合适,还是使用传统的JavaScript发送请求的方式吧。
总之,HTML提供了这样便捷的能力,能否活用相关技术并在项目中大放异彩,还要看个人的意识和技术嗅觉。