如何通用检测网页中<a href>链接被用户触发访问的可行性咨询
通用场景下不存在100%覆盖所有触发方式的方案,但可以通过组合方案覆盖99%以上的普通用户操作场景,具体实现思路如下:
1. 事件组合方案(无侵入,无需修改链接结构)
- 用
click+auxclick事件组合替代原有的click+mouseup组合auxclick是浏览器原生支持的非左键点击事件,天然支持捕获中键点击行为,且原生排除了拖拽、文本选中这类非触发跳转的操作,不需要额外写逻辑做干扰排除,相关示例代码如下:// 捕获左键、键盘触发、Ctrl/Command+点击场景 document.addEventListener('click', e => { const link = e.target.closest('a[href]') if (link) { // 执行你的检测逻辑 } }) // 捕获中键点击场景 document.addEventListener('auxclick', e => { const link = e.target.closest('a[href]') if (link && e.button === 1) { // e.button=1对应中键 // 执行你的检测逻辑 } }) - 右键菜单打开场景的兼容方案
目前没有任何前端事件可以捕获用户右键后选择「在新标签页打开」「在新窗口打开」这类操作,行业通用的替代方案是监听链接上的contextmenu事件做预统计,虽然无法100%确认用户最终是否选择了打开链接的选项,但可以结合业务数据做误差修正,基本可以覆盖这类场景的量级统计需求。
2. 中转链接方案(最高覆盖度,推荐优先使用)
如果你可以修改站点内的外域链接结构,优先采用中转跳转的方案,这也是各大互联网公司通用的外域链接统计方案:
- 把所有外域链接的href改写为你的站内中转地址,比如将
https://example.com改写为/jump?target=https%3A%2F%2Fexample.com - 用户无论用任何方式触发链接访问,都会先请求你的中转服务,你可以在服务端完成检测统计后,返回302状态码跳转到真实的目标外域地址
- 该方案可以覆盖所有跳转场景:包括左键/中键/右键打开、地址栏直接访问改写后的链接、甚至其他脚本触发的跳转,完全没有前端事件监听的边界遗漏问题,仅需要在实现时对
target参数做合法性校验,避免被利用做钓鱼跳转。
如果受站点限制既不能修改链接结构也不能加中转服务,目前确实没有方案可以100%覆盖所有触发场景,但是事件组合+右键预统计的方案已经可以覆盖95%以上的普通用户操作场景,基本可以满足通用的统计需求。
内容的提问来源于stack exchange,提问作者junvar
相关产品推荐
相关产品推荐

