D.iK.iJ / JavaScript примеры / Скрипт отслеживания клика по фрейму (iframe), рекламе Яндекс Директ и Гугл Адснс [скачать]


На днях понадобилось отслеживание клика по фрейму iframe который создает реклама Гугл Адсенса (Яндекс Директа).

Как оказалось, нельзя просто повесить onclick на фрейм или контейнер вокруг него. Поэтому я решил использовать onblur (потерю фокуса) страницей.

Осталалась только одна загвоздка - блур (потеря фокуса) срабатывает даже просто при переключении на другую вкладку в браузере. Но тут мне помог onmouseover.

Да, вариантов скрипта я сделал очень много. Например, при наведении на Фрейм создавался элемент с фокусом и если фокус терялся, это считалось кликом. Понятно, что если курсор уходил с фрейма, я затирал элемент и ничего не происходило.

Ниже (в коде страницы) представлен самый короткий Javascript из всех по отлову кликов на фрейме. Похоже, даже кроссбраузерный.


Пример. Не показывать блок рекламы после клика

Можно использовать для простой защиты Гугл Адсенс и Яндекс Директ от скликивания на сайте.

<?php if (!isset($_COOKIE['reklama'])){ ?>
<div onmouseover="javascript: th=this; window.focus(); window.onblur=function(){SetCookie('reklama=off', '365'); setInterval('th.style.display=\'none\';', 1000); }" onmouseout="window.onblur=function(){}">

Фрейм для теста<br><iframe src="/Loading.gif" class="img" border="0" frameborder="0" scrolling="no" style="background-color: white; width: 50%; height: 150px; border: 1px solid #666666;"></iframe>

</div>
<?php } else { ?>

Что-то еще, если реклама показана уже. Блок будет выведен при перезагрузке страницы.

<?php } ?>

<script>
/* Установка куки (ID блока и количество дней) */
function SetCookie(id, days){
var ws=new Date();
ws.setDate((days-0+ws.getDate()));
document.cookie=id+"; path=/; expires="+ws.toGMTString();
}
</script>

Где SetCookie('reklama=off', '365'); - ставит куки reklama=off на 365 дней при клике.
<?php if (!isset($_COOKIE['reklama'])){ ?> - условие, что реклама покажется, если НЕТ куки reklama.

Если блоков много, просто используем SetCookie('reklama1=off', '365'); SetCookie('reklama2=off', '365'); и так далее.
А в PHP меняем название куки на <?php if (!isset($_COOKIE['reklama1'])){ ?> и <?php if (!isset($_COOKIE['reklama2'])){ ?>
Сам скрипт установки куки достаточно использовать один раз.