2010-03-18 17 views
5

chcę wykryć kliknij INSIDE iframe nie onclick na elemencie iframe próbowałem zdarzenie onclick musisz kliknąć na iframe by wywołać funkcję, a nawet wypróbowałem addeventlistener do okna lub dokumentu nic nie działa tak, jakby iframe nie było tam funkcja nigdy Triger po kliknięciu wewnątrz iframe :(plzwykryj kliknięcie wewnątrz iframe

+1

Próbowałaś wprowadzenie słuchacza w znaczniku BODY zawartości wewnątrz iframe? – Zoidberg

+0

To zewnętrzna strona w elemencie iframe; Nie mogę nic dodać ... – santa

+0

Jest to możliwe, zobacz rozwiązanie crossbrowser: http://stackoverflow.com/a/32138108/1064513 –

Odpowiedz

2

Ze względów bezpieczeństwa, jesteś nie powinien być w stanie śledzić działania w IFRAME, że idzie do innej strony internetowej. Jeśli masz IFRAME na swoje własna strona, która trafia na inną stronę we własnej witrynie, następnie rozwiązuje to poprzez dodanie śledzenia kliknięć bezpośrednio w kodzie, który uruchamia IFRAME:

Jeśli jest to niemożliwe, możesz rozważyć uruchomienie własnego dostosowanego serwera proxy dla IFRAME: ed webserver, dzięki czemu będziesz mógł ponownie dodawać własne śledzenie kliknięć. Zobacz Mousehole by _why dla przykładów kodu.

0

Możesz umieścić przezroczysty DIV na IFRAME.
Rozmiar tego DIV jest taki sam lub większy niż IFRAME.
I z wyższą właściwością CSS z-index.

Następnie, po kliknięciu na IFRAME, DIV odbiera zdarzenie.

Ale ponieważ świat nie jest idealny, straciłeś możliwość klikania wewnątrz IFRAME.

+0

Jeśli ktoś zrobił to i przechwycił kliknięcie div, czy byłby jakiś sposób aby go przesłać (tak naprawdę symulowałaby kliknięcie tej samej lokalizacji w podstawowym elemencie iframe ...)? – Benj

+0

Element div nie odbiera zdarzenia kliknięcia w tym przypadku. Wykrywanie kliknięć nie jest możliwe nad lub w elemencie iframe, jeśli zawartość pochodzi z innej domeny. – Andy

9

Działa tylko na iframe w tej samej domenie:

$('body', $('select-your-iframe-here').contents()).click(function(event) { 
    console.log('Clicked! ' + event.pageX + ' - ' + event.pageY); 
}); 
+0

Rozwiązanie dla wielu domen i crossbrowser: http://stackoverflow.com/a/32138108/1064513 –

3

Spróbuj

$(window).click(function(e){ 
    $('#result').text('Clicked inside document'); 
}); 

$(window).blur(function(e){ 
    $('#result').text('Clicked out of the window or on the iframe'); 
});​ 

testu http://jsfiddle.net/4vBRe/

do wykrycia tylko kliknięcie na iframe następnie użyć zdarzenia mouseover następnie rozmycie

+2

To działa ...Przypuszczam, że nie w każdej sytuacji, ale to przydatna sztuczka. – byronyasgur

6

Przeglądarki internetowe nie umożliwiają dostępu do zawartości elementu iframe ze względów bezpieczeństwa (z wyjątkiem sytuacji, gdy element iframe znajduje się w tej samej domenie, co strona nadrzędna).

Ale istnieje obejście, używając zdarzenia rozmycia, które jest uruchamiane po kliknięciu elementu iframe (ponieważ podczas gdy element iframe uzyskuje fokus, strona nadrzędna go traci).

Napisałem wtyczkę jQuery, która wykorzystuje tę wskazówkę do wykrywania kliknięć na elemencie iframe, jest dostępna tutaj: https://github.com/finalclap/iframeTracker-jquery. Możesz przeczytać samouczek pod numerem http://www.finalclap.com/tuto/track-iframe-click-jquery-87/ (w języku francuskim).

Aby go użyć, po prostu trzeba dopasować element (y) iframe chcesz śledzić, dostarczając funkcji zwrotnej:

jQuery(document).ready(function($){ 
    $('.iframe_wrap iframe').iframeTracker({ 
     blurCallback: function(){ 
      // Do something when iframe is clicked (like firing an XHR request) 
     } 
    }); 
}); 
+0

Czy istnieje sposób na wykrycie wszystkich kliknięć wewnątrz ramki, a nie tylko pierwszego? – Gab

+0

Nie sądzę, ze względu na tę samą zasadę pochodzenia: https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy – Vince

Powiązane problemy