Je comprends qu'il n'est pas possible de dire ce que fait l'utilisateur à l'intérieur d'un domaine iframe
s'il s'agit d'un domaine croisé. Ce que je voudrais faire, c'est suivre si l'utilisateur a cliqué du tout dans le fichier iframe
. J'imagine un scénario où il y a un invisible div
au-dessus du iframe
et le div
passera juste alors l'événement de clic au iframe
.
Est-ce que quelque chose comme ça est possible? Si c'est le cas, comment pourrais-je procéder? Ce iframes
sont des publicités, donc je n'ai aucun contrôle sur les balises utilisées.
javascript
iframe
ads
dom-events
click-tracking
Russ Bradberry
la source
la source
Réponses:
Non. Tout ce que vous pouvez faire est de détecter la souris qui entre dans l'iframe, et potentiellement (mais pas de manière fiable) lorsqu'elle en ressort (c'est-à-dire en essayant de déterminer la différence entre le pointeur passant sur l'annonce sur son chemin ailleurs et persistant sur l'annonce).
Non, il n'y a aucun moyen de simuler un événement de clic.
En attrapant la souris, vous empêcheriez le clic d'origine d'accéder à l'iframe. Si vous pouviez déterminer quand le bouton de la souris était sur le point d'être enfoncé, vous pourriez essayer d'éloigner le div invisible pour que le clic passe ... mais il n'y a pas non plus d'événement qui se déclenche juste avant une descente de la souris.
Vous pouvez essayer de deviner, par exemple en regardant si le pointeur s'est immobilisé, en devinant qu'un clic pourrait être sur le point de se produire. Mais ce n'est absolument pas fiable, et si vous échouez, vous venez de perdre un clic.
la source
C'est certainement possible. Cela fonctionne dans Chrome, Firefox et IE 11 (et probablement d'autres).
JSFiddle
Attention: cela ne détecte que le premier clic. Si je comprends bien, c'est tout ce que vous voulez.
la source
blur
événement d'iframe ne se déclenche pas).Sur la base de la réponse de Mohammed Radwan, j'ai proposé la solution jQuery suivante. Fondamentalement, ce qu'il fait est de suivre ce que les gens d'iFrame planent. Ensuite, si la fenêtre est floue, cela signifie très probablement que l'utilisateur a cliqué sur la bannière iframe.
l'iframe doit être placé dans un div avec un identifiant, pour vous assurer que vous savez sur quelle iframe l'utilisateur a cliqué:
alors:
... cela maintient overiFrame à -1 quand aucun iFrames n'est survolé, ou le 'bannerid' défini dans le div wrapping lorsqu'un iframe est survolé. Tout ce que vous avez à faire est de vérifier si 'overiFrame' est défini lorsque la fenêtre est floue, comme ceci: ...
Solution très élégante avec un inconvénient mineur: si un utilisateur appuie sur ALT-F4 en passant la souris sur un iFrame, il l'enregistrera comme un clic. Cela ne s'est produit que dans FireFox, IE, Chrome et Safari ne l'ont pas enregistré.
Merci encore Mohammed, solution très utile!
la source
setTimeout(function(){ window.focus(); }, 0);
. Désormais, l'utilisateur clique, met le focus dans l'iframe, le script récupère ce focus et peut désormais surveiller les changements de focus ultérieurs à partir des clics futurs.C'est une petite solution qui fonctionne dans tous les navigateurs même IE8:
Vous pouvez le tester ici: http://jsfiddle.net/oqjgzsm0/
la source
Le code suivant vous montrera si l'utilisateur clique / survole ou sort de l'iframe: -
Vous devez remplacer le src dans l'iframe par votre propre lien. J'espère que cela vous aidera. Cordialement, Mo.
la source
Je viens de trouver cette solution ... je l'ai essayé, j'ai adoré.
Fonctionne pour les iframes interdomaines pour ordinateur de bureau et mobile!
Je ne sais pas si c'est encore infaillible
Bon codage
la source
Vous pouvez y parvenir en utilisant l'événement de flou sur l'élément de fenêtre.
Voici un plugin jQuery pour suivre les clics sur les iframes (il déclenchera une fonction de rappel personnalisée lorsqu'un iframe est cliqué): https://github.com/finalclap/iframeTracker-jquery
Utilisez-le comme ceci:
la source
voir http://jsfiddle.net/Lcy797h2/ pour ma solution de longue haleine qui ne fonctionne pas de manière fiable dans IE
la source
Cela fonctionne pour moi sur tous les navigateurs (y compris 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>
la source
Mohammed Radwan, votre solution est élégante. Pour détecter les clics iframe dans Firefox et IE, vous pouvez utiliser une méthode simple avec document.activeElement et une minuterie, cependant ... J'ai cherché partout dans les interwebs une méthode pour détecter les clics sur un iframe dans Chrome et Safari. Au bord de l'abandon, je trouve votre réponse. Merci Monsieur!
Quelques conseils: j'ai trouvé votre solution plus fiable lorsque vous appelez directement la fonction init (), plutôt que via attachOnloadEvent (). Bien sûr, pour ce faire, vous ne devez appeler init () qu'après l'iframe html. Cela ressemblerait donc à quelque chose comme:
la source
Vous pouvez le faire pour afficher les événements dans le document parent:
Étendez simplement la liste d'événements pour plus d'événements.
la source
Je suis tombé sur une situation où je devais suivre les clics sur un bouton de réseau social tiré via une iframe. Une nouvelle fenêtre s'ouvrirait lorsque le bouton était cliqué. Voici ma solution:
la source
http://jsfiddle.net/QcAee/406/
Créez simplement un calque invisible sur l'iframe qui revient lorsque vous cliquez et monte lorsque l'événement mouseleave sera déclenché !!
Besoin de jQuery
cette solution ne se propage pas au premier clic dans l'iframe!
la source
Cela fonctionne certainement si l'iframe provient du même domaine que votre site parent. Je ne l'ai pas testé pour les sites inter-domaines.
Sans jQuery, vous pouvez essayer quelque chose comme ça, mais encore une fois, je n'ai pas essayé cela.
Vous pouvez même filtrer vos résultats:
la source
Combinant la réponse ci-dessus avec la possibilité de cliquer encore et encore sans cliquer à l'extérieur de l'iframe.
la source
Nous pouvons capter tous les clics. L'idée est de réinitialiser le focus sur un élément en dehors de l'iFrame après chaque clic:
JSFiddle
la source
Je pense que vous pouvez faire quelque chose comme:
en utilisant jQuery pour accomplir cela.
la source
Comme trouvé ici: Détecter le clic dans l'iframe à l'aide de JavaScript
=> Nous pouvons utiliser iframeTracker-jquery :
la source
Sur la base de la réponse de Paul Draper, j'ai créé une solution qui fonctionne en continu lorsque vous avez des Iframes qui ouvrent un autre onglet dans le navigateur. Lorsque vous revenez la page continue à être active pour détecter le clic sur le framework, c'est une situation très courante:
Le code est simple, l'événement de flou détecte la perte de mise au point lorsque l'iframe est cliqué, et teste si l'élément actif est l'iframe (si vous avez plusieurs iframe vous pouvez savoir qui a été sélectionné) cette situation est fréquente lorsque vous avez des cadres publicitaires .
Le deuxième événement déclenche une méthode de focus lorsque vous revenez à la page. il est utilisé pour l'événement de changement de visibilité.
la source
Voici une solution utilisant des approches suggérées avec hover + blur et astuces d'éléments actifs, pas de bibliothèques, juste des js purs. Fonctionne bien pour FF / Chrome. La plupart du temps, l'approche est la même que celle proposée par @Mohammed Radwan, sauf que j'utilise une méthode différente proposée par @ zone117x pour suivre le clic iframe pour FF, car window.focus ne fonctionne pas sans ajout de paramètres utilisateur :
Voici la méthode composée:
la source
Hypothèses -
Cela fonctionne à la fois pour les iframes source et sans source
Si un nouvel onglet est ouvert / la même page se décharge et que le pointeur de la souris se trouve dans l'Iframe, un clic est considéré
la source