Ich verstehe, dass es nicht möglich ist zu sagen, was der Benutzer in einem iframe
domänenübergreifenden Bereich tut . Was ich tun möchte, ist zu verfolgen, ob der Benutzer überhaupt in die geklickt hat iframe
. Ich stelle mir ein Szenario vor, in dem sich ein Unsichtbares div
über dem befindet iframe
und der div
Wille das Klickereignis gerade an das weitergibt iframe
.
Ist so etwas möglich? Wenn ja, wie würde ich dann vorgehen? Das iframes
sind Anzeigen, so habe ich keine Kontrolle über die Tags , die verwendet werden.
javascript
iframe
ads
dom-events
click-tracking
Russ Bradberry
quelle
quelle
Antworten:
Nein. Alles, was Sie tun können, ist zu erkennen, dass die Maus in den Iframe geht und möglicherweise (wenn auch nicht zuverlässig), wenn sie wieder herauskommt (dh Sie versuchen, den Unterschied zwischen dem Zeiger, der auf dem Weg woanders über die Anzeige fährt, und dem Verweilen herauszufinden auf der Anzeige).
Nein, es gibt keine Möglichkeit, ein Klickereignis zu fälschen.
Indem Sie die Maus abfangen, verhindern Sie, dass der ursprüngliche Klick zum Iframe gelangt. Wenn Sie feststellen könnten, wann die Maustaste gedrückt werden soll, könnten Sie versuchen, das unsichtbare Div aus dem Weg zu räumen, damit der Klick durchgeht ... aber es gibt auch kein Ereignis, das kurz vor einem Mousedown ausgelöst wird.
Sie könnten versuchen zu erraten, indem Sie beispielsweise nachsehen, ob der Zeiger zur Ruhe gekommen ist, und erraten, dass möglicherweise ein Klick bevorsteht. Aber es ist völlig unzuverlässig, und wenn Sie versagen, haben Sie gerade einen Klick verloren.
quelle
Dies ist sicherlich möglich. Dies funktioniert in Chrome, Firefox und IE 11 (und wahrscheinlich auch in anderen).
JSFiddle
Vorsichtsmaßnahme: Dies erkennt nur den ersten Klick. Soweit ich weiß, ist das alles, was Sie wollen.
quelle
blur
Ereignis des Iframes wird nicht ausgelöst ).Basierend auf der Antwort von Mohammed Radwan habe ich die folgende jQuery-Lösung gefunden. Grundsätzlich wird verfolgt, was iFrame-Leute schweben. Wenn dann das Fenster unscharf wird, bedeutet dies höchstwahrscheinlich, dass der Benutzer auf das Iframe-Banner geklickt hat.
Der Iframe sollte in ein Div mit einer ID eingefügt werden, um sicherzustellen, dass Sie wissen, auf welchen Iframe der Benutzer geklickt hat:
so:
... dies hält overiFrame auf -1, wenn keine iFrames schweben, oder die 'Bannerid', die im Wrapping-Div gesetzt ist, wenn ein Iframe schwebt. Alles was Sie tun müssen, ist zu überprüfen, ob 'overiFrame' gesetzt ist, wenn das Fenster unscharf wird, wie folgt: ...
Sehr elegante Lösung mit einem kleinen Nachteil: Wenn ein Benutzer beim Bewegen der Maus über einen iFrame ALT-F4 drückt, wird dies als Klick protokolliert. Dies geschah jedoch nur in FireFox, IE, Chrome und Safari haben es jedoch nicht registriert.
Nochmals vielen Dank Mohammed, sehr nützliche Lösung!
quelle
setTimeout(function(){ window.focus(); }, 0);
. Jetzt klickt der Benutzer, setzt den Fokus in den Iframe, das Skript zieht diesen Fokus zurück und kann nun weitere Fokusänderungen von zukünftigen Klicks überwachen.Dies ist eine kleine Lösung, die in allen Browsern funktioniert, auch in IE8:
Sie können es hier testen: http://jsfiddle.net/oqjgzsm0/
quelle
Der folgende Code zeigt Ihnen, ob der Benutzer auf den Iframe klickt / schwebt oder ihn verlässt: -
Sie müssen den src im iframe durch Ihren eigenen Link ersetzen. Hoffe das wird helfen. Grüße, Mo.
quelle
Ich habe gerade diese Lösung gefunden ... Ich habe es versucht, ich habe es geliebt ...
Funktioniert für domänenübergreifende Iframes für Desktop und Mobile!
Ich weiß nicht, ob es noch kinderleicht ist
Viel Spaß beim Codieren
quelle
Sie können dies erreichen, indem Sie das Unschärfeereignis für das Fensterelement verwenden.
Hier ist ein jQuery-Plugin zum Verfolgen des Klickens auf Iframes (es wird eine benutzerdefinierte Rückruffunktion ausgelöst, wenn auf einen Iframe geklickt wird): https://github.com/finalclap/iframeTracker-jquery
Verwenden Sie es so:
quelle
Unter http://jsfiddle.net/Lcy797h2/ finden Sie meine langwierige Lösung, die im IE nicht zuverlässig funktioniert
quelle
Dies funktioniert für mich in allen Browsern (einschließlich 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>
quelle
Mohammed Radwan, Ihre Lösung ist elegant. Um Iframe-Klicks in Firefox und IE zu erkennen, können Sie jedoch eine einfache Methode mit document.activeElement und einem Timer verwenden. Ich habe in allen Interwebs nach einer Methode gesucht, um Klicks auf einen Iframe in Chrome und Safari zu erkennen. Am Rande des Aufgebens finde ich Ihre Antwort. Danke mein Herr!
Einige Tipps: Ich habe festgestellt, dass Ihre Lösung zuverlässiger ist, wenn Sie die Funktion init () direkt aufrufen, als über attachOnloadEvent (). Dazu müssen Sie natürlich init () erst nach dem iframe-HTML-Code aufrufen. Es würde also ungefähr so aussehen:
quelle
Sie können dies tun, um Ereignisse in das übergeordnete Dokument zu übertragen:
Erweitern Sie einfach die Ereignisliste für weitere Ereignisse.
quelle
Ich geriet in eine Situation, in der ich Klicks auf einen Social-Media-Button verfolgen musste, der durch einen Iframe gezogen wurde. Ein neues Fenster wird geöffnet, wenn auf die Schaltfläche geklickt wird. Hier war meine Lösung:
quelle
http://jsfiddle.net/QcAee/406/
Machen Sie einfach eine unsichtbare Ebene über dem Iframe, die beim Klicken zurückgeht und beim Auslösen des Mouseleave-Ereignisses nach oben geht !!
Benötigen Sie jQuery
Diese Lösung verbreitet sich nicht beim ersten Klicken in den Iframe!
quelle
Dies funktioniert definitiv, wenn der Iframe von derselben Domain stammt wie Ihre übergeordnete Site. Ich habe es nicht für domänenübergreifende Websites getestet.
Ohne jQuery könnten Sie so etwas versuchen, aber ich habe es auch nicht versucht.
Sie können sogar Ihre Ergebnisse filtern:
quelle
Kombinieren Sie die obige Antwort mit der Möglichkeit, immer wieder zu klicken, ohne außerhalb des Iframes zu klicken.
quelle
Wir können alle Klicks fangen. Die Idee ist, den Fokus auf ein Element außerhalb des iFrame nach jedem Klick zurückzusetzen:
JSFiddle
quelle
Ich glaube, Sie können so etwas tun:
Verwenden Sie dazu jQuery.
quelle
Wie dort zu finden: Erkennen Klicken Sie mit JavaScript auf Iframe
=> Wir können iframeTracker-jquery verwenden :
quelle
Basierend auf der Antwort von Paul Draper habe ich eine Lösung erstellt, die kontinuierlich funktioniert, wenn Sie Iframes haben, die andere Registerkarten im Browser öffnen. Wenn Sie die Seite zurückgeben, bleiben Sie weiterhin aktiv, um den Klick auf das Framework zu erkennen. Dies ist eine sehr häufige Situation:
Der Code ist einfach. Das Unschärfeereignis erkennt den Fokusverlust, wenn auf den Iframe geklickt wird, und testet, ob das aktive Element der Iframe ist (wenn Sie mehrere Iframes haben, können Sie wissen, wer ausgewählt wurde). Diese Situation tritt häufig auf, wenn Sie Werbeframes haben .
Das zweite Ereignis löst eine Fokusmethode aus, wenn Sie zur Seite zurückkehren. Es wird das Sichtbarkeitsänderungsereignis verwendet.
quelle
Hier ist eine Lösung mit vorgeschlagenen Ansätzen mit Hover + Blur und Tricks für aktive Elemente, keine Bibliotheken, sondern nur reine js. Funktioniert gut für FF / Chrome. Der Ansatz entspricht größtenteils dem von @Mohammed Radwan vorgeschlagenen, außer dass ich eine andere von @ zone117x vorgeschlagene Methode verwende, um den Iframe-Klick für FF zu verfolgen, da window.focus ohne zusätzliche Benutzereinstellungen nicht funktioniert :
Hier ist die zusammengesetzte Methode:
quelle