Попытка отследить количество кликов в письмах пользователя - PullRequest
4 голосов
/ 07 октября 2010

Моя проблема заключается в следующем:

Я пытаюсь посчитать количество кликов по объявлениям в нашей рассылке. Дело в том, что я не могу включить JS в электронные письма - это понятно. Так что я нашел способ обойти это, написав небольшой кусочек кода:

<script type="text/javascript" src="http://www.factmag.com/wp-content/themes/modularity_/js/jquery-1.3.2.min.js"></script>

<script type="text/javascript">

    function getUrlVars()
    {
        var vars = [], hash;
        var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
        for(var i = 0; i < hashes.length; i++)
        {
            hash = hashes[i].split('=');

            if($.inArray(hash[0], vars)>-1)
            {
                vars[hash[0]]+=","+hash[1];
            }
            else
            {
                vars.push(hash[0]);
                vars[hash[0]] = hash[1];
            }
        }

        return vars;
    }

                function redirect()
                {
                    var link = getUrlVars()["page_url"];
                    setTimeout('document.location = "' + link + '"', 100)
                }
</script>
<body onload="javascript:redirect();"></body>


<script type="text/javascript">

 var _gaq = _gaq || [];
 _gaq.push(['_setAccount', 'UA-4340871-1']);
 _gaq.push(['_trackPageview']);

 (function() {
 var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
 ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
 var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
 })();

</script>

Он размещен на наших серверах, а в бюллетене рекламный код имеет следующий формат:

<a href="http://www.example.com/example_ad_counter/?utm_source=banner6&utm_medium=banner&utm_campaign=banner&page_url=ad_url"><img src="ad_img_url" style="border:1px solid #000;"></a>

Итак, что я хочу сделать здесь:

  1. Пользователь нажимает на объявление в электронном письме.
  2. Он переходит на страницу с этим сценарием.
  3. Google Analytics считает количество, необходимое для его отслеживания.
  4. Скрипт перенаправляет пользователя на страницу рекламодателя.

Теперь сделка - Google Analytics здесь не считает. Я предполагаю, что мне нужно что-то добавить в Google JS, чтобы сделать это, но понятия не имею, что. Может ли кто-нибудь помочь мне с этим? Спасибо.

1 Ответ

1 голос
/ 10 октября 2010

Вы хотите убедиться, что ваш редирект вызывается после вызова кода Google. В настоящее время он запущен onLoad. yC правильно в своем комментарии к вопросу о том, что это, скорее всего, состояние гонки, но нажатие вашего setTimeout не полностью разрешит это состояние гонки.

Вы можете попробовать вызвать функцию перенаправления после того, как Google вставит себя на страницу.

Код здесь:

(function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();

... буквально google добавляет новый тег script на вашу страницу, а затем загружает в него URL-адрес аналитики. Брендон был прав, предложив отключить асинхронный вызов, но тогда я бы предложил добавить ваш перенаправляющий вызов после строки var s = document (внутри функции) и надеяться, что это даст Google достаточно времени, чтобы выполнить свою грязную работу. и прежде чем перенаправить.

Если это не сработает, придерживайтесь предложения yC и увеличьте время ожидания. Просто знайте, что задержка перенаправления зависит от времени загрузки и запуска скрипта Google, что не предсказуемо. Я бы, вероятно, поместил этот setTimeout в то же место, где я рекомендовал вызывать функцию перенаправления напрямую. Это означает, что отсчет задержки не начнется, пока на страницу не будет добавлен скрипт Google Analytics.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...