61 votes

Faire défiler une iframe avec javascript?

Je charge dynamiquement une iframe avec javascript. Après le chargement, comment puis-je faire défiler un nombre spécifique de pixels vers le bas (c.-à-d. Après le chargement de la page dans l'iframe, comment faire défiler l'iframe lui-même jusqu'à la région spécifiée de la page?)

54voto

CMS Points 315406

Vous pouvez utiliser l' onload événement à détecter le moment où l'iframe a fini de charger, et de là, vous pouvez utiliser le scrollTo fonction de la contentWindow de l'iframe, pour faire défiler jusqu'à une position définie de pixels, d'en haut et à gauche (x, y):

var myIframe = document.getElementById('iframe');
myIframe.onload = function () {
    myIframe.contentWindow.scrollTo(xcoord,ycoord);
}

Vous pouvez consulter un exemple ici.

Remarque: Cela ne fonctionne que si les deux pages de résider sur le même domaine.

25voto

Greg Points 91

Inspiré par Nelsons commentaire que j'ai fait cette.

Solution de contournement pour javascript Même la politique de l'origine en ce qui concerne l'aide .ScrollTo( ) sur le document d'origine sur un domaine externe.

Très simple de contourner cela implique la création d'un mannequin html de la page qui héberge le site web externe en son sein, puis de l'appel .ScrollTo(x,y) sur cette page une fois que c'est chargé. Alors la seule chose que vous devez faire est d'avoir un cadre ou un iframe mettre ce site web.

Il y a beaucoup d'autres manières de le faire, c'est de loin la plus simple façon de le faire.

*notez la hauteur doit être grande pour accueillir les barres de défilement valeur maximale.

--home.htm

<html>
<head>
<title>Home</title>
</head>

<frameset rows="*,170">
<frame src=body.htm noresize=yes frameborder=0 marginheight=0 marginwidth=0 scrolling=no>
<frame src="weather.htm" noresize=yes frameborder=0 marginheight=0 marginwidth=0 scrolling=no>
</frameset>
</html>

--weather.htm

<html>
<head>
<title>Weather</title>
</head>

<body onLoad="window.scrollTo(0,170)">

<iframe id="iframe" src="http://forecast.weather.gov/MapClick.php?CityName=Las+Vegas&state=NV&site=VEF&textField1=36.175&textField2=-115.136&e=0" height=1000 width=100% frameborder=0 marginheight=0 marginwidth=0 scrolling=no>
</iframe>

</body>
</html>

9voto

Justin Ludwig Points 912

Utilisez la propriété scrollTop du contenu du cadre pour définir le décalage de défilement vertical du contenu sur un nombre spécifique de pixels (comme 100):

 <iframe src="foo.html" onload="this.contentWindow.document.documentElement.scrollTop=100"></iframe>
 

5voto

Steve Claridge Points 4119

Une solution jQuery:

 $("#frame1").ready( function() {

  $("#frame1").contents().scrollTop( $("#frame1").contents().scrollTop() + 10 );

});
 

1voto

Rippo Points 10580

Je viens de faire la même chose avec une div, je suis sûr que vous pouvez l’adapter à une iFrame.

Regardez cela , vous verrez le div défiler vers le bas, voir la source et regarder à partir de la ligne 680

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X