仅当URL中不存在GET变量时才调用脚本

时间:2019-11-02 05:14:31

标签: javascript php jquery

Howdy Stackoverflowies,

对于特定要求,我想建立一个网站,如果URL中定义了特定变量,我想排除对Google Analytics(分析)脚本的调用。

我在网上搜寻了一个简单的解决方案,但是我看过的所有内容看起来都太复杂了,涉及到用Javascript等手动创建函数。

到目前为止,我找到的最简单(但有点脏)的解决方案涉及到PHP代码段的调用,例如:

<?php
        if ($_GET['dnt']===null)
        {
        ?>
        <!-- Recaptcha Script -->
        <script src='https://www.google.com/recaptcha/api.js'></script> 

        <!-- Global site tag (gtag.js) - Google Analytics -->
        <script async src="https://www.googletagmanager.com/gtag/js?id=my_id"></script>
        <script>
        console.log('test');
          window.dataLayer = window.dataLayer || [];
          function gtag(){dataLayer.push(arguments);}
          gtag('js', new Date());

          gtag('config', 'my_id');
        </script>
        <?php } ?>

但是,无论用什么方法,在这段代码中,脚本总是被调用...我什至尝试用if子句替换

if(!isset($_GET['dnt']))

...但是结果完全一样。

您是否有SIMPLE替代品可以做到这一点? 我上面代码的来源是这篇文章:http://www.daniloaz.com/en/5-ways-to-exclude-your-own-visits-from-google-analytics/#comment-159117

谢谢。

1 个答案:

答案 0 :(得分:0)

自从发布该消息以来,我一直在调查该问题,尽管测试了很多东西,但我无法使PHP正确读取$ _GET变量。我无法确定原因,并且由于没人能提供帮助,因此这就是我最终在jQuery中解决该问题的方法:

var $_GET = {};

document.location.search.replace(/\??(?:([^=]+)=([^&]*)&?)/g, function () {
    function decode(s) {
        return decodeURIComponent(s.split("+").join(" "));
    }

    $_GET[decode(arguments[1])] = decode(arguments[2]);
});

//If variable "dnt" is defined, bypass Google Analytics
if(typeof $_GET["dnt"] == 'undefined')
{
    var gA = "<script src='https://www.google.com/recaptcha/api.js'><\/script><script async src='https://www.googletagmanager.com/gtag/js?id=my_id'><\/script><script>window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);}gtag('js', new Date());gtag('config', 'my_id');<\/script>";
    $('body').append(gA);
}

这很丑,但是做得很好。