如何在用户撤回同意时动态停止Hotjar的会话录制?
问题描述
我有一个使用Hotjar的单页应用(SPA),已在引导页脚本中加载Hotjar JavaScript代码:
<script> (function(h,o,t,j,a,r){ h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)}; h._hjSettings={hjid:1234567,hjsv:6}; a=o.getElementsByTagName('head')[0]; r=o.createElement('script');r.async=1; r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv; a.appendChild(r); })(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv='); </script>
目前录制功能正常,可在Hotjar账户中查看用户活动记录。我期望实现类似Google Tag Manager的机制,在用户撤回同意时停止会话录制,但未在Hotjar官网找到相关文档。Hotjar隐私页面提及了同意管理,但合规资源页面未涉及该内容。我知道可在用户确认同意后再动态加载脚本,但无法找到单页应用加载后撤回同意时停止录制的优雅方案。Hotjar脚本加载后页面中会出现hj对象,其包含丰富的方法和属性,但无相关文档说明。请问能否使用hj对象动态停止录制?
解决方案
可以通过hj对象的内置方法实现用户撤回同意时停止录制,以下是具体实现方案:
1. 停止当前会话跟踪(核心方法)
调用hj('optOut')方法即可立即停止Hotjar的所有跟踪行为(包括会话录制、热图、表单分析等),同时会在浏览器本地存储中标记用户已选择退出,后续会话默认不会再启动跟踪。
代码示例:
// 用户触发撤回同意时执行此函数 function handleConsentRevocation() { if (window.hj) { hj('optOut'); } }
2. 彻底清理Hotjar实例(可选)
如果需要更彻底地清除Hotjar在页面中的残留影响,可以在调用optOut后执行以下清理操作:
function revokeHotjarTracking() { if (window.hj) { // 停止跟踪并标记用户退出 hj('optOut'); // 清除全局对象和本地存储标记 delete window.hj; delete window._hjSettings; localStorage.removeItem('_hjUserId'); localStorage.removeItem('_hjRecordingEnabled'); // 移除页面中Hotjar的脚本元素 const hotjarScripts = document.querySelectorAll('script[src*="hotjar"]'); hotjarScripts.forEach(script => script.remove()); } }
3. SPA场景的适配注意事项
- 路由切换无需额外处理:用户执行
optOut后,Hotjar不会在SPA路由切换时自动重新初始化跟踪,后续页面交互不会被记录。 - 重新同意时恢复跟踪:如果用户后续重新同意数据收集,需要重新初始化Hotjar并调用
hj('optIn')恢复跟踪:function initHotjarAfterConsent() { if (!window.hj) { // 重新加载Hotjar脚本 (function(h,o,t,j,a,r){ h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)}; h._hjSettings={hjid:1234567,hjsv:6}; a=o.getElementsByTagName('head')[0]; r=o.createElement('script');r.async=1; r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv; a.appendChild(r); })(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv='); // 启用跟踪 hj('optIn'); } }
补充说明
optOut和optIn是Hotjar为隐私合规场景提供的内置方法,尽管官方文档未详细公开所有hj对象方法,但这两个方法在实际生产环境中是稳定可靠的,可用于处理用户同意状态的动态切换。
内容的提问来源于stack exchange,提问作者Paul Suart
相关产品推荐
相关产品推荐

