Встроить свое поведение в виджет
Используйте обработчики событий, на которые можно повеситься при помощи настройки bindEvents
.
Например:
<script type="text/javascript">
var handleTWFpostRepaint = function(params) {
// this = инстанс виджета, в котором было сгенерировано событие
console.info([this, params]);
}
</script>
<script defer="defer" data-timepad-widget-v2="event_register" data-timepad-customized="АЙДИ_ВАШЕЙ_КАСТОМИЗАЦИИ" src="//timepad.ru/js/tpwf/loader/min/loader.js">
(function(){return {
"event":{"id":"АЙДИ_ВАШЕГО_СОБЫТИЯ"},
"debug": true,
"bindEvents": {
"postRepaint": "handleTWFpostRepaint"
}
};})();
</script>
На что вешаться
Если хочется повесить обработчик на элементы (например свой onClick
), то самое подходящее место — switchedToNewRenderTarget
, где следует повесить свои обработчики при помощи метода .on(). Сам виджет именно так и поступает.
Два других значимых события — это preRepaint
и postRepaint
. В аргументы передается информация, на какой роут был осуществлен переход, и это наиболее удобное место для добавления кода отслеживания целей. Вы можете использовать console.info([arguments, this]);
в качестве обработчика, чтобы посмотреть, какие данные передаются.
Событие preReady
вызывается однократно после загрузки, но до исполнения основного кода виджета, вскорости после обработки настроек. В нём можно переопределить код виджета при помощи this.someFunction = function() { ... }.bind(this)
. В нём же можно напрямую повесить обработчики остальных событий, вместо того, чтобы использовать bindEvents
: this.obs.listen('preRepaint', function(params) { ... }.bind(this));
Обработка ошибок
Будьте внимательны при написании кода обработчиков! Необработанные исключения нарушат работу виджета. Обязательно проверяйте существование объектов, прежде чем обращаться к их методам.
Будьте особенно внимательны со скриптами, предназначенными для отслеживания действий пользователя. Некоторые блокировщики рекламы вырезают их. Поэтому в примерах с Яндекс.Метрикой мы и рекомендуем писать так:
window.yaCounter123 && window.yaCounter123.reachGoal("GOOOOAL", "your_label");