Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: JavaScript и вызов события Yandex.Metrika - помогите плиз.
цитата
08/10/14 в 22:18
 WeRock
Уже несколько часов мучаюсь, не могу сообразить как сделать, а ведь работало у меня это год назад! Итак.

Имеем сайт. В конце стоит код счетчика яндекс метрики, все ок, заходы считает.
На сайте по клику по ссылку отрабатывается событию onClick="start()" вызывая функцию JS типа:

Цитата:
function start() {
alert "Сюда кликнули!";
}

Мне нужно, чтобы событие зачитывалось как достигнутая цель.
Пытаюсь сделать следующее:

Цитата:
function start() {
yaCounterXXXXXX.reachGoal('click_here');
alert "Сюда кликнули!";
}


где ХХХХХХ - мой ИД в метрике.
На что получаю ошибку типа yaCounterXXXXXX не определено. Что в общем-то логично. В функции нигде не задана переменная(объект) yaCounterXXXXXX. Но как ее задать?

Попробовал код метрики (счетчика) ставить вверх страницы (выше вызова этой функции) - все то же самое.

Пробовал писать внутри функции типа
var yaCounterXXXXXX

тоже не получается. :-(

Подскажите плиз как сделать.
цитата
08/10/14 в 22:46
 ibiz
а что в консоле пишет?
цитата
08/10/14 в 23:06
 WeRock

yaCounterXXXXXX is no defined
цитата
08/10/14 в 23:32
 ibiz
yaCounterXXXXXX - циферки правильные указаны?
цитата
08/10/14 в 23:39
 WeRock
yaCounterXXXXXX - да, конечно, я их копипастил.
Просто внутри функции этот самый yaCounterXXXXXX не определен. Что логично. Вопрос, как его определить? Самое интересное то, что такая конструкция у меня работала год назад. Причем особых проблем я не помню. Но как там было реализовано - хз.

Если просто указать в ссылке:

OnClick = "yaCounterXXXXXX.reachGoal('click_here');" - то тут все работает. Но мне нужно чтобы по клику запускалась функция, а из нее уже дергался .reachGoal

ЗЫ: В ПХП я бы написал:

global yaCounterXXXXXX;

и все бы заработало. А вот в этом яваскрипте всегда все как-то не так реализуется :-).
цитата
08/10/14 в 23:48
 ibiz
yaCounterXXXXXX вроде глобальная
у себя проверил, все работает console.log(yaCounterXXXXXX.reachGoal('click_here')); выдает true
цитата
08/10/14 в 23:50
 ibiz
ну попробуй написать window.yaCounterXXXXXX trollface.png
цитата
09/10/14 в 00:11
 Mika
yaCounterXXXXXX где определяется? в какой-то функции? var перед yaCounterXXXXXX стоит? если да, то убирай.
цитата
09/10/14 в 09:28
 ibiz
надо смотреть весь код страницы, yaCounterXXXXXX глобальная переменная, возможно что-то не подгружается или сбрасывается по ходу загрузки

Код:

<script type="text/javascript">(function (d, w, c) { (w[c] = w[c] || []).push(function() { try { w.yaCounterXXXXXX = new Ya.Metrika({id:XXXXXX, clickmap:true, trackLinks:true}); } catch(e) {} }); var n = d.getElementsByTagName("script")[0], s = d.createElement("script"), f = function () { n.parentNode.insertBefore(s, n); }; s.type = "text/javascript"; s.async = true; s.src = (d.location.protocol == "https:" ? "https:" : "http:") + "//mc.yandex.ru/metrika/watch.js"; if (w.opera == "[object Opera]") { d.addEventListener("DOMContentLoaded", f); } else { f(); } })(document, window, "yandex_metrika_callbacks");</script><noscript><div><img src="//mc.yandex.ru/watch/XXXXXX" style="position:absolute;left:-9999px;" alt="" /></div></noscript>
цитата
09/10/14 в 11:06
 WeRock
Ну вот, сделал тестовую страницу.
В метрике задана цель-событие "click_play".
Код страницы:

<html>
<body>
<script type="text/javascript">
function start() {
   alert('Link was clicked!');
   yaCounterXXXXXXXX.reachGoal('click_play');
}

</script>

<h1>Hello World!</h1>
<A href="#" OnClick="start();">Click here!</A>

<!-- Yandex.Metrika informer -->
<a href="https://metrika.yandex.ru/stat/?id=XXXXXXXX&amp;from=informer"
target="_blank" rel="nofollow"><img src="//bs.yandex.ru/informer/XXXXXXXX/1_0_FFFFFFFF_EFEFEFFF_0_pageviews"
style="width:80px; height:15px; border:0;" alt="Яндекс.Метрика" title="Яндекс.Метрика: данные за сегодня (просмотры)" /></a>
<!-- /Yandex.Metrika informer -->

<!-- Yandex.Metrika counter -->
<script type="text/javascript">
var yaParams = {/*Здесь параметры визита*/};
</script>

<script type="text/javascript">
(function (d, w, c) {
    (w[c] = w[c] || []).push(function() {
        try {
            w.yaCounterXXXXXXXX = new Ya.Metrika({id:XXXXXXXX,
                    webvisor:true,
                    clickmap:true,
                    trackLinks:true,
                    accurateTrackBounce:true,params:window.yaParams||{ }});
        } catch(e) { }
    });

    var n = d.getElementsByTagName("script")[0],
        s = d.createElement("script"),
        f = function () { n.parentNode.insertBefore(s, n); };
    s.type = "text/javascript";
    s.async = true;
    s.src = (d.location.protocol == "https:" ? "https:" : "http:") + "//mc.yandex.ru/metrika/watch.js";

    if (w.opera == "[object Opera]") {
        d.addEventListener("DOMContentLoaded", f, false);
    } else { f(); }
})(document, window, "yandex_metrika_callbacks");
</script>
<noscript><div><img src="//mc.yandex.ru/watch/XXXXXXXX" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter -->

</body>
</html>

В результате, если смотреть через FireBug, при клике на сылку вылетает ошибка:

ReferenceError: yaCounterXXXXXXXX is not defined
yaCounterXXXXXXXX.reachGoal('click_play');

Соответственно, цели не передаются.

При этом, заходы на страницу фиксируются, т.е. счетчик нормально собирает статистику.
Что я делаю не так?
цитата
09/10/14 в 11:26
 WeRock
Так, становится еще интереснее..
Я решил отказаться от функции.
Запихнул код счетчика вверх страницы, полсе тега
<body>

А ниже добавил еще одну ссылку:

<A href="#" OnClick="yaCounterXXXXXXXX.reachGoal('click_play2'); ">Click here 2!</A>

Предварительно задав в метрике событие click_play2

В результате та же самая ошибка: ReferenceError: yaCounterXXXXXXXX is not defined и как следствие цели не фиксируются.
цитата
09/10/14 в 11:31
 Alexandur
А ты с иксами также запускаешь?

А то я попробовал на циферки заменить, и всё заработало.
цитата
09/10/14 в 11:44
 WeRock
Да нет, конечно. У меня цифры везде.
Бред какой-то... Сейчас посмотрел другой свой сайт, там все нормально, запуск идет из функции или из ссылки. Все работает. Тут нихрена не работает... Бредятина какая-то.
цитата
09/10/14 в 12:08
 ibiz
можно считать вопрос закрытым trollface.png
цитата
09/10/14 в 12:28
 WeRock
ibiz писал:
можно считать вопрос закрытым

Да вот пока так и не заработало.
Поставил другой браузер, на другой комп, туда же поставл файрбаг. В консоле вроде все ок, но цели в метрике по прежнему на нуле.

Единсвенное что во вкладке Response я получаю вот такой ответ:

Код:
GIF89a&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;!&#65533;&#65533;&#65533;&#65533;&#65533;,&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;D&#65533;;


т.е. такое впечатление, что с кодировкой что-то не так. Может в этом дело?
цитата
14/10/14 в 11:42
 5hark
а если так?

Код:

function start(yaCounterXXXXX) {
    yaCounterXXXXXX.reachGoal('click_here');
    alert "Сюда кликнули!";
}

<a href='' onclick="start(yaCounterXXXXXX);">link</a>


Эта страница в полной версии