Wie kann ich ein Klick- oder mousedown-Ereignis auf einem div, das einen iframe umgibt, erfassen. Ich habe versucht, die Funktion an click-Ereignis auf dem div anzuhängen, aber da der iframe nie das Ereignis bis zum umgebenden div sprudelt, wird die Funktion nie genannt. Gibt es eine Möglichkeit, ich kann das Ereignis auf der Div erfassen und dann an den Iframe für Standardaktion propagierencapture klicken auf div um einen iframe
Antwort
Wenn der Klick im Iframe-Bereich ist, behandelt der Iframe-Kontext das Click-Ereignis, es sprudelt nicht bis zum Iframe-Elternteil. Das div registriert das click-Ereignis also nie, wenn es im Iframe-Bereich passiert ist.
Wenn der Iframe eine Seite enthält, die nicht zur selben Domäne wie der Iframe-Elternteil gehört, ist jegliche Interaktion verboten (re. same origin policy).
Wenn die same origin policy erfüllt ist, gibt es ein paar Dinge, die Sie tun können, Sie ein Verfahren, in dem iframe Elternkontext nennen könnte:
top.parentFunction();
So in der iframe Sie einen Ereignis-Listener hinzufügen, die die Delegierten Iframe Eltern (zugänglich mit der top
Referenz.
Die Übertragung von Ereignissen ist viel komplizierter, so werde ich einfach auf Diego Perini's NWEvents library beziehen. Ich glaube, dass sein Event-System einer der besseren draußen und er ist besonders auf Iframe-Interaktion
Ich würde sicherlich nicht beginnen, Ihren eigenen Code zu schreiben, um dies zu erreichen, dies kann leicht ein Jahr lang Projekt sein, wenn Sie es richtig machen wollen und selbst dann Diego Arbeiten unterlegen sein wird.
Es gibt keine "gute" Möglichkeit, es zu tun, aber wenn Sie wirklich einen Klick auf einen Iframe erkennen müssen, können Sie es in den neuesten Browsern tun.
<iframe src="http://mtw-ed.com/" id="iframe" style=""></iframe>
<script type="text/javascript">
var inIframe = false;
function checkClick() {
if (document.activeElement
&& document.activeElement === document.getElementById("iframe")) {
if (inIframe == false) {
alert("iframe click");
inIframe = true;
}
} else
inIframe = false;
}
setInterval(checkClick, 200);
</script>
Dieses Skript prüft alle 200 ms, ob der Benutzer im Iframe ist. Natürlich haben sie vielleicht nicht auf den Iframe geklickt, um dorthin zu gelangen, aber ich fürchte, das ist das Beste, was Sie ohne @ BGerrissens Lösung tun können.
Es wird nur das erste "Klicken" erkannt, es sei denn, Sie klicken erneut auf. Es funktioniert nur in wirklich modernen Browsern.
Arbeitete wie ein Charme für iPhone –
Ich versuchte zu erkennen, klicken Sie auf eine soziale Freigabe-Taste (die Iframe ist), machte eine winzig winklige Direktive aus dieser Methode und wow, es hat perfekt funktioniert! Vielen Dank! –
Sie können eine Bibliothek wie porthole verwenden, um Nachrichten zwischen Parent und iframe auch über Domänen hinweg zu übergeben. Wenn Sie dies verwenden, wird das Ereignis nicht genau weitergegeben (Sie können das Ereignisobjekt nicht abrufen). Sie können jedoch ein eigenes Ereignis in Form einer einfachen Nachricht erstellen und es dann im übergeordneten Element als Klick behandeln.
Allerdings habe ich Brendon Antwort verwendet, da es für meine aktuellen Bedarf einfachere Arbeiten ist.
- 1. Capture RatingBar Klicken Sie auf
- 2. iFrame Popup auf Thumbnail klicken
- 3. div oben auf iframe
- 4. Capture Rechtsklick auf HTML DIV
- 5. Capture rot-X klicken
- 6. Simulieren klicken auf DIV
- 7. Laden iframes durch einen div mit verschachtelten divs klicken
- 8. Capture datagrid Zelle Header klicken
- 9. Wickeln Sie ein div um jeden iframe
- 10. erkennen klicken innerhalb iframe
- 11. Jquery Mobile POP Up Capture Klicken Sie
- 12. jQuery, um einen Klick auf einen iFrame auszulösen?
- 13. Zielmutter div von iframe enthält iframe
- 14. WebView erkennen klicken in iframe
- 15. jquery Größenänderung eines div beim Klicken auf einen Link
- 16. Klicken Sie auf einen Link, der hinter einem div steht?
- 17. Overlay div über iframe
- 18. Hide div withing iframe
- 19. Ersetzen div Inhalt mit versteckten div beim Klicken von Menü
- 20. Iframe überlappende div Ausgabe
- 21. Schließen Sie einen Dialog, indem Sie auf den modalen Iframe klicken.
- 22. Zoomen einer PDF in einem iframe auf Knopf klicken
- 23. Klicken Sie auf einen Link, um zu einem bestimmten div (jquery) zu scrollen
- 24. Klicken Sie auf Schaltfläche in Iframe in WebBrowser Control
- 25. Verhindern Klicken durch div
- 26. Folgende URLs in backbone.js auf div klicken
- 27. Klicken Sie auf Element unter div
- 28. einleiten auf div mit Tab klicken und
- 29. Klicken Sie auf die Schaltfläche Remote | Div | CasperJS
- 30. Zeigen/Verstecken Div durch Klicken auf ein anderes div
Das Aufrufen von Funktionen auf Eltern- oder Vorfahren-Frames ist nicht erlaubt (heutzutage), also wird das leider nicht mehr funktionieren. Als Randnotiz gibt es "window.parent" (Elternrahmen) und "window.top" (immer der "oberste" Rahmen, d. H. Die Seite, die der Benutzer im Browser geöffnet hat). – codener