2009-05-30 34 views
6

no puede escuchar el evento de desplazamiento en Internet Explorer 7.jQuery caso de desplazamiento de marco flotante (IE)

He intentado:

$("#myIframe").scroll(function() { alert('hi'); }) 

Obras para FF:

$($("#myIframe").contents().get(0)).scroll(function() { alert('hi'); }) 

Obteniendo pulsaciones de teclas funcionan:

$($("#myIframe").contents().get(0)).keydown(function() { alert('hi'); }) 

Respuesta

12

Por mucho que me guste jQuery. No puedo hacer que esto funcione. Sin embargo, probé esto en un simple javascript antiguo y funcionó perfectamente en IE, FF, Safari y Chrome.

<script type="text/javascript"> 
    window.onload = function() { 
     var frm = document.getElementById("myIframe").contentWindow; 
     frm.onscroll = function(){ 
     alert("EUREKA"); 
     } 
    } 
</script> 

EDIT: las siguientes obras en FF, Safari y Chrome cuando se utiliza window.load(). Cuando se usa document.ready, solo funciona en FF. Por alguna razón, no funciona en IE8 en ningún caso.

$(window).load(function(){ 
    $($('#myIframe').contents()).scroll(function(){ 
     alert('frame scrolled in jquery'); 
    }); 
}); 
+0

funciona perfecto, gracias! –

+0

esto no funciona en ningún navegador. – user1130157

+0

asegúrese de establecer 'src' del iframe en' http: // + window.location.hostname' para evitar fallas debido a la violación de la misma política de origen (seguridad). –

0

poner esto en la matriz:

var childScrollHandler = function() { 
    alert('Scrolling going on'); 
} 

y luego poner esto en el contenido anidado:

$(document).bind('scroll', function(ev){ 
    parent.childScrollHandler(ev); 
}); 

reemplazar $(document) por cualquier elemento que está intentando escuchar en.

3

Sé que es un hilo viejo, pero algunas personas podrían encontrarlo útil.

$(document).scroll() puede reemplazarse por $(window).scroll(), y me ha funcionado hasta ahora.

1

Prueba esto:

2 cosas deben suceder antes de que pueda recorrer el DOM de un contexto de navegación anidada.

Debe saber que existe el iframe, que se ha tenido en cuenta con el evento listo para documentos.

Y debe asegurarse de que el iframe se haya cargado.

es decir:

$(document).ready(function(){ 

     // #page is the id of the iframe 
     $('#page').load(function(){ 
      // $(this)[0].contentWindow is the window of your nested browsing context/ iframe 
      $($(this)[0].contentWindow).scroll(function(){ 
       console.log($(this).scrollTop()); 
      }); 
     }); 
    }); 

Una cosa a tener en cuenta es que este definitivamente no va a funcionar en navegadores Firefox.

Cuestiones relacionadas