Я понимаю, что невозможно сказать, что пользователь делает внутри, iframe
если это перекрестный домен. Я хотел бы отслеживать, щелкнул ли пользователь вообще в iframe
. Я представляю сценарий, в котором есть невидимое div
поверх, iframe
а div
затем просто передается событие щелчка в iframe
.
Возможно ли что-то подобное? Если да, то как мне это сделать? Это iframes
реклама, поэтому я не могу контролировать используемые теги.
javascript
iframe
ads
dom-events
click-tracking
Расс Брэдберри
источник
источник
Ответы:
Нет. Все, что вы можете сделать, это обнаружить, что мышь входит в iframe, и потенциально (хотя и ненадежно), когда она возвращается (то есть пытается определить разницу между указателем, проходящим по рекламе в другом месте, и задержкой по объявлению).
Нет, невозможно подделать событие клика.
Перехватывая mousedown, вы предотвращаете попадание исходного клика в iframe. Если бы вы могли определить, когда была нажата кнопка мыши, вы могли бы попытаться убрать невидимый div с пути, чтобы щелчок прошел ... но также нет события, которое срабатывает непосредственно перед mousedown.
Вы можете попытаться угадать, например, посмотрев, остановился ли указатель, предполагая, что вот-вот произойдет щелчок. Но это абсолютно ненадежно, и если вы потерпите неудачу, вы просто потеряете клик.
источник
Конечно, это возможно. Это работает в Chrome, Firefox и IE 11 (и, возможно, в других).
JSFiddle
Предупреждение: обнаруживает только первый щелчок. Насколько я понимаю, это все, что вам нужно.
источник
blur
событие iframe не срабатывает).Основываясь на ответе Мохаммеда Радвана, я придумал следующее решение jQuery. По сути, он отслеживает, что люди в iFrame зависают. Затем, если окно размывается, это, скорее всего, означает, что пользователь щелкнул баннер iframe.
iframe следует поместить в div с идентификатором, чтобы убедиться, что вы знаете, на какой iframe нажал пользователь:
так:
... это сохраняет overiFrame на -1, когда не наведены iFrames, или 'bannerid', установленный в оборачивающем div, когда iframe зависает. Все, что вам нужно сделать, это проверить, установлен ли overiFrame, когда окно размывается, например: ...
Очень элегантное решение с небольшим недостатком: если пользователь нажимает ALT-F4 при наведении указателя мыши на iFrame, он регистрирует это как щелчок. Это произошло только в FireFox, хотя IE, Chrome и Safari не зарегистрировали это.
Еще раз спасибо Мохаммед, очень полезное решение!
источник
setTimeout(function(){ window.focus(); }, 0);
. Теперь пользователь щелкает, переводит фокус в iframe, скрипт возвращает этот фокус и теперь может отслеживать дальнейшие изменения фокуса на основании будущих кликов.Это небольшое решение, которое работает во всех браузерах, даже в IE8:
Вы можете проверить это здесь: http://jsfiddle.net/oqjgzsm0/
источник
Следующий код покажет вам, если пользователь щелкнет / наведет курсор или покинет iframe: -
Вам нужно заменить src в iframe своей собственной ссылкой. Надеюсь, это поможет. С уважением, Пн.
источник
Только что нашел это решение ... Я попробовал, мне понравилось ..
Работает с междоменными фреймами iframe для компьютеров и мобильных устройств!
Не знаю, надежно ли это еще
Удачного кодирования
источник
Вы можете добиться этого, используя событие размытия в элементе окна.
Вот плагин jQuery для отслеживания щелчков по iframe (он запускает настраиваемую функцию обратного вызова при нажатии iframe): https://github.com/finalclap/iframeTracker-jquery
Используйте это так:
источник
см. http://jsfiddle.net/Lcy797h2/ для моего длинного решения, которое не работает надежно в IE
источник
У меня это работает во всех браузерах (включая Firefox)
https://gist.github.com/jaydson/1780598
https://jsfiddle.net/sidanmor/v6m9exsw/
<iframe id="idanmorblog" src="https://sidanmor.com/" style="width:400px;height:600px" ></iframe>
источник
Мохаммед Радван, Ваше решение элегантно. Чтобы обнаружить щелчки iframe в Firefox и IE, вы можете использовать простой метод с document.activeElement и таймером, однако ... Я искал по всему Интернету метод обнаружения щелчков на iframe в Chrome и Safari. На грани отказа, я нахожу ваш ответ. Спасибо, сэр!
Несколько советов: я считаю, что ваше решение более надежно при прямом вызове функции init (), а не через attachOnloadEvent (). Конечно, для этого вы должны вызывать init () только после iframe html. Это будет выглядеть примерно так:
источник
Вы можете сделать это, чтобы отобразить события в родительском документе:
Просто расширьте список событий, добавив больше событий.
источник
Я столкнулся с ситуацией, когда мне приходилось отслеживать клики по кнопке социальных сетей, выдаваемой через iframe. При нажатии кнопки открывается новое окно. Вот мое решение:
источник
http://jsfiddle.net/QcAee/406/
Просто создайте невидимый слой над iframe, который возвращается при щелчке и поднимается при срабатывании события mouseleave !!
Нужен jQuery
это решение не распространяет первый щелчок внутри iframe!
источник
Это определенно работает, если iframe находится из того же домена, что и ваш родительский сайт. Я не тестировал его для междоменных сайтов.
Без jQuery вы могли бы попробовать что-то вроде этого, но я снова этого не пробовал.
Вы даже можете фильтровать свои результаты:
источник
Сочетание приведенного выше ответа с возможностью щелкать снова и снова, не нажимая за пределами iframe.
источник
Мы можем поймать все щелчки. Идея состоит в том, чтобы сбрасывать фокус на элементе вне iFrame после каждого щелчка:
JSFiddle
источник
Я считаю, что вы можете сделать что-то вроде:
используя jQuery для этого.
источник
Как обнаружено там: обнаружение щелчка в iframe с помощью JavaScript
=> Мы можем использовать iframeTracker-jquery :
источник
Основываясь на ответе Пола Дрейпера, я создал решение, которое работает постоянно, когда у вас есть фреймы, которые открывают другую вкладку в браузере. Когда вы вернетесь, страница останется активной для обнаружения щелчка по фреймворку, это очень распространенная ситуация:
Код прост, событие размытия обнаруживает потерю фокуса при щелчке по iframe и проверяет, является ли активный элемент iframe (если у вас несколько iframe, вы можете знать, кто был выбран), эта ситуация часто возникает, когда у вас есть рекламные фреймы ,
Второе событие вызывает метод фокуса, когда вы возвращаетесь на страницу. используется событие изменения видимости.
источник
Вот решение, использующее предлагаемые подходы с трюками с наведением + размытие и активными элементами, а не с любыми библиотеками, а только с чистыми js. Прекрасно работает для FF / Chrome. В основном подход такой же, как предложил @Mohammed Radwan, за исключением того, что я использую другой метод, предложенный @ zone117x, для отслеживания щелчка iframe для FF, потому что window.focus не работает без дополнительных пользовательских настроек :
Вот составной метод:
источник
Предположения -
Это работает для обеих sourceful и без исходных фреймов
Если открывается новая вкладка / та же страница выгружается, а указатель мыши находится внутри iframe, считается, что щелчок
источник