13

Comment puis-je capturer un clic ou un événement mousedown sur un div entourant un iframe. J'ai essayé d'attacher la fonction à l'événement click sur la div mais comme l'iframe ne fait jamais de bulles sur l'événement jusqu'au div qui l'entoure, la fonction n'est jamais appelée. Est-il possible de capturer l'événement sur la div puis de le propager à l'iframe pour l'action par défaut?capture cliquez sur div entourant un iframe

Répondre

10

Si le clic est dans la zone iframe, le contexte iframe gère l'événement click, il ne iframe parent. Ainsi, la div n'enregistrera jamais l'événement click s'il s'est produit dans la zone iframe.

De plus, si l'iframe contient une page qui n'appartient pas au même domaine que le parent iframe, toute interaction est interdite (référence: same origin policy).

Lorsque la same origin policy est remplie, il y a quelques choses que vous pouvez faire, vous pouvez appeler une méthode dans le contexte parent iframe:

top.parentFunction(); 

Ainsi, dans le iframe vous ajoutez un écouteur d'événement qui délègue au parent iframe (accessible avec la référence top.

événements de multiplication est beaucoup plus compliqué, donc je vais simplement se référer à Diego Perini's NWEvents library. Je crois que son système d'événement à l'un des meilleurs là-bas et il est en particulier sur interaction iframe

Je ne commencerais certainement pas à écrire votre propre code pour réaliser ceci, ceci peut facilement être un projet d'année longue si vous voulez le faire correctement et même alors sera inférieur au travail de Diego.

+0

L'appel de fonctions sur les cadres parents ou ancêtres n'est pas autorisé (de nos jours), donc cela ne fonctionnera malheureusement plus (plus). En guise de note, il y a 'window.parent' (cadre parent) et' window.top' (toujours le cadre "le plus haut", c'est-à-dire la page que l'utilisateur a ouvert dans le navigateur). – codener

6

Il n'y a pas de "bonne" façon de le faire, mais si vous avez vraiment besoin de détecter un clic sur un Iframe, vous pouvez le faire dans les derniers navigateurs. Ce script vérifie toutes les 200 ms si l'utilisateur se trouve dans l'iFrame. Ce script vérifie toutes les 200 ms. Bien sûr, ils n'ont peut-être pas cliqué sur l'Iframe pour y arriver, mais je crains que ce soit le meilleur que vous puissiez faire sans la solution @ BGerrissen.

Il détectera le premier 'clic' seulement, sauf si vous cliquez à nouveau sur le bouton. Cela ne fonctionne que dans les navigateurs vraiment modernes.

+0

A travaillé comme un charme pour l'iPhone –

+1

J'essayais de détecter le clic sur un bouton de partage social (qui est iframe), fait une petite directive angulaire de cette méthode et wow, ça a fonctionné parfaitement! Merci! –

0

Vous pouvez utiliser une bibliothèque comme porthole pour transmettre des messages entre parent et iframe, même entre domaines. L'utiliser ne propagerait pas exactement l'événement (vous ne pourrez pas obtenir l'objet d'événement), mais vous pouvez créer votre propre événement sous la forme d'un message simple, puis le gérer dans le parent en un clic.

Here's their example

Cependant, je l'ai utilisé la réponse de Brendon comme il est des œuvres plus simples pour mon besoin actuel.

Questions connexes