2012-06-28 2 views
2

Piwik трекер позволяет отслеживать пользовательскую как таковые:Uncaught ReferenceError: piwikTracker не определен

jQuery('div.orange').click(function() { 
    piwikTracker.trackGoal(3); // Track click on this hitarea 
}); 

В моей среде WordPress, я загрузка JQuery в скрипте отдельно от сценария piwik.js по понятным причинам.

В Chrome, я получаю ошибку

Uncaught ReferenceError: piwikTracker is not defined

на сценарии, который я использую пользовательское отслеживание.

Есть ли способ определить функцию перед вызовом функции обработчика событий? Почему только Chrome?

EDIT

Я проверил PHP скрипт Piwik, который загружает JavaScript, и это на самом деле загружается скрипт в сноске. Функция, вызывающая пользовательское отслеживание, загружается в заголовок. Это имеет значение? Сценарии в заголовке всегда загружаются перед нижним колонтитулом?

+0

Вы проверили на вкладке «Сеть», что загружается сценарий? –

+0

только что сделал, и это не так! Это происходит в IE и Firefox. – AlxVallejo

ответ

1

Попробуйте поставить свой код в ready обработчика:

$(function(){ 
    jQuery('div.orange').click(function() { 
    piwikTracker.trackGoal(3); // Track click on this hitarea 
    }); 
}); 

Или onload событие в зависимости от того работает:

window.onload = function() { 
    jQuery('div.orange').click(function() { 
    piwikTracker.trackGoal(3); // Track click on this hitarea 
    }); 
} 
3

Да. Там, где вы ставите скрипт на странице. Думая, что, когда браузер интерпретирует страницу, он сначала прочитает голову, а затем тело. Для вашего случая лучше сначала проверить DOMReady и объект piwikTracker.

jQuery(document).ready(function() { 
    jQuery('div.orange').click(function() { 
     if (piwikTracker) { 
      piwikTracker.trackGoal(3); // Track click on this hitarea 
     } 
    }); 
}); 
+0

Piwik.js загружается в нижнем колонтитуле, поэтому функция не загружается. Я попытался указать, что загрузка скрипта в нижнем колонтитуле, но это создало белый экран смерти. – AlxVallejo

+0

jquery находится в готовом обработчике, но я все еще получаю ошибку. Я думаю, что я задаю неправильную зависимость для загрузки скрипта. Я не уверен, какой именно сценарий мне нужен для Piwik и плагина wp-piwik. – AlxVallejo

+0

DOM: ready недостаточно, он должен ждать окна: load: '$ (window) .load (function() {...});' – giraff

5

Асинхронный отслеживания решает эту проблему в элегантном способе:

var _paq = _paq || []; 
_paq.push(['trackGoal', 3]); 

Если Piwik была загружена ранее, это автоматически посылает запрос цели. Если после него загружается piwik, это будет только массив, который будет обработан после загрузки piwik!

См. documentation о том, как настроить асинхронное отслеживание, это будет метод по умолчанию для Piwik 1.11.

Смежные вопросы