2009-05-30 6 views
6

Ne peut pas écouter l'événement de défilement dans Internet Explorer 7.jQuery événement de défilement iframe (IE)

J'ai essayé:

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

Works pour FF:

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

Obtention des touches de travail:

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

Répondre

12

Autant que j'aime jQuery. Je ne peux pas faire fonctionner ça. Cependant, j'ai essayé ceci dans le vieux javascript simple et cela a fonctionné très bien dans IE, FF, Safari et Chrome.

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

EDIT: Les travaux suivants dans FF, Safari et Chrome lors de l'utilisation window.load(). Lors de l'utilisation de document.ready, cela ne fonctionne que dans FF. Pour une raison quelconque, cela ne fonctionne pas dans IE8 dans les deux cas.

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

fonctionne parfaitement, merci! –

+0

cela ne fonctionne dans aucun navigateur. – user1130157

+0

assurez-vous de mettre le 'src' de l'iframe à' http: // + window.location.hostname' pour éviter l'échec dû à la violation de la même politique d'origine (sécurité). –

0

Mettre cela sur le parent:

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

Et puis mettre cela sur le contenu iframe:

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

remplacer $(document) par quelque élément que vous essayez d'écouter en.

3

Je sais que c'est un vieux fil, mais certaines personnes pourraient le trouver utile. Peut être remplacé par $(window).scroll(), et cela a fonctionné pour moi jusqu'à présent

1

Essayez ceci:

2 choses doivent se produire avant de pouvoir traverser le Royaume d'un contexte imbriqué de navigation.

Vous devez savoir que le iframe existe, pris en charge avec l'événement document prêt.

Et vous devez vous assurer que l'iframe est chargé.

-à-dire:

$(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()); 
      }); 
     }); 
    }); 

Une chose à noter est que cela ne fonctionnera certainement pas dans Firefox navigateur cross.

Questions connexes