Skip to main content
 首页 » 编程设计

jquery之每个 session 只发送一次事件

2025年05月04日141Leo_wl

每次 session 是否可以只发送一次谷歌分析事件?我不想在每次浏览量中都发送我的特定事件。

我想要达到的目标:

我目前正在运营一个没有任何广告的网站。我想测试我的网站有多少访问者在使用广告拦截器。

我会添加一个元素

<div class="ad"></div> 

这可能会被每个广告拦截器(至少大多数)过滤掉。然后我会用jquery测试元素是否存在
$(function(){ 
     function test(){ 
         var len = $('.ad').length; 
         if(len === 0){ 
             ga.send(..); 
         } 
     } 
 
    // give adblockers a sec to remove everything, just in case 
    setTimeout(test,500); 
 
}); 

我可能可以使用自定义 cookie 的解决方法,例如
// simplified 
if (!cookie) { 
    test(); 
} 

但如果仅使用 google api 可以做到这一点,我会很感兴趣

请您参考如下方法:

Google Analytics 事件是一种命中类型(如综合浏览量),不能将其限定为 session 或用户。即使每个 session 只能发送一个事件(使用 cookie 或 sessionStorage,您实际上也不会在 GA 报告中了解全部情况。

要提供更好的解决方案,请考虑使用具有“ session ”范围的自定义维度来存储该数据。很酷的地方在于维度应用于 全部 范围内的点击类型 - 意味着任何网页浏览、事件等也具有与之关联的维度。

为此,请在自定义定义中的属性设置下的 Google Analytics(分析)管理中创建维度。获取索引号(类似于 'dimension1''dimension 4' 的字符串)并粘贴行 之前 发送综合浏览量(理想情况下)或事件。

记住:维度不是命中,因此只需设置它们,直到命中也被发送!另外,一定要启用non-interaction在事件上(如果这是您选择的路线),否则您将误报来自使用广告拦截器的反弹。

这是理想的片段(注意:如果您要将 setTimeout 作为检测的一部分,请不要使用此方法,因为它也会延迟综合浏览量发送...考虑一个不需要超时的方法。):

<script> 
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 
})(window,document,'script','//www.google-analytics.com/analytics.js','ga'); 
 
ga('create', 'UA-XXXXX-Y', 'auto'); 
 
//Detection goes here. If true: 
ga('set', 'dimension1', 'Ad Blocker'); //Change 'dimension1' to yours. 
 
ga('send', 'pageview'); 
</script> 

如果您无法在 <head> 之前进行检测,则上面的代码将如下所示GA 发送网页浏览片段。
function test(){ 
     var len = $('.ad').length; 
     if(len === 0){ 
         ga('set', 'dimension1', 'Ad Blocker'); //Change 'dimension1' to yours. 
         ga('send', 'event', 'Ad Blocker', {nonInteraction: true}); //Add action and label as needed. 
     } 
 }