2010-06-17 3 views
28

Lorsque quelqu'un clique sur un lien dans une iframe (page enfant), comment puis-je faire défiler la page parente vers le haut? Le problème est que la page enfant reste au même endroit de la page, car l'iframe a beaucoup plus de hauteur que la page parente.Comment faire pour faire défiler la page parente vers le haut lorsque la page enfant est cliquée dans iframe?

Veuillez noter que les pages parent et enfant se trouvent dans des sous-domaines différents.

J'ai créé une démo pour montrer: http://www.apus.edu/_test/iframe/index.htm

Répondre

46

L'astuce consiste à ajouter le onload="window.parent.parent.scrollTo(0,0)" suivant au iframe et qui devrait le faire!

+2

Merci! Cela fonctionne aussi si vous faites onload = "window.parent.scrollTo (0,0)" dans l'étiquette du corps dans l'iframe. – aruanoc

+2

ajouter de la charge à la balise iframe est tellement plus sexy que de l'ajouter à la balise body, car peu de gens ont la possibilité d'étiqueter manuellement le 'body' s'ils utilisent un CMS par exemple. Bonne suggestion cependant! – Evan

+4

@aruanoc Fonctionne uniquement si le domaine dans l'iframe correspond au domaine parent. – voodoocode

9

En utilisant JavaScript dans l'iframe, référencez le parent et appelez la méthode scroll().

window.parent.scroll(0,0); 
+0

Un grand merci: D – Pomster

5

Dans la page Iframe.

window.parent.ScrollToTop(); // Scroll to top function 

Sur la page Parrent:

window.ScrollToTop = function(){ 
    $('html,body', window.document).animate({ 
    scrollTop: '0px' 
    }, 'fast'); 
}; 
1

Si vous avez des origines croisées (iFrame et les parents ont des domaines différents), puis juste appeler window.scrolTo (0,0) ne fonctionnera pas .

Une solution d'origine croisée consiste à envoyer un message sécurisé de l'iframe au parent.

code à l'intérieur de l'iframe:

var parent_origin = 'http://your/iframe/domain/here' 
parent.postMessage({'task': 'scroll_top'}, parent_origin); 

Ensuite code parent:

function handleMessage(event) { 
    var accepted_origin = 'http://your/iframe/domain/here'; 
    if (event.origin == accepted_origin){ 
     if (event.data['task'] == 'scroll_top'){ 
      window.scrollTo(0,0); 
     } 
     // you can have more tasks 
    } else{ 
     console.error('Unknown origin', event.origin); 
    } 
} 

window.onload = function() { 
    window.addEventListener("message", handleMessage, false); 
} 
Questions connexes