2009-12-05 13 views
16

jQuery scrollTop gibt null zurück, wenn Fenster ein iframe ist. Ist jemand in der Lage gewesen herauszufinden, wie scrollTop eines iframe zu bekommen?So erhalten Sie scrollTop eines iframe

weitere Informationen:

mein Skript wird sich in der iframe läuft, ist das übergeordnete Fenster auf einer anderen Domäne, also kann ich die ID des iframe oder irgendetwas nicht zugreifen, wie die

+0

Sind Sie versuchen, es aus dem Inneren des bekommen Eltern des 'iframe' oder aus dem' iframe' selbst heraus? –

+1

aus dem iframe selbst. krank hinzufügen weitere Informationen zu meiner Frage – mkoryak

Antwort

10

Sie können festlegen, scrollTop durch diese Einstellung mit:

$("html,body").scrollTop(25); 

So könnte man versuchen, es so bekommen:

$("html,body").scrollTop(); 

Weil verschiedene Browser die scrollTop auf verschiedene Elemente (body oder html) setzen.

Vom scrollTo Plugin:

Aber das wird nicht wahrscheinlich noch in bestimmten Browsern. Hier ist der relevante Abschnitt aus dem Quellcode von Ariel Flesher's scrollTo plugin for jQuery:

// Hack, hack, hack :) 
// Returns the real elements to scroll (supports window/iframes, documents and regular nodes) 
$.fn._scrollable = function(){ 
    return this.map(function(){ 
    var elem = this, 
     isWin = !elem.nodeName || $.inArray(elem.nodeName.toLowerCase(), ['iframe','#document','html','body']) != -1; 

    if(! isWin) { 
     return elem; 
    } 


    var doc = (elem.contentWindow || elem).document || elem.ownerDocument || elem; 

    return $.browser.safari || doc.compatMode == 'BackCompat' ? 
     doc.body : 
     doc.documentElement; 
    }); 
}; 

Sie können dann laufen:

$(window)._scrollable().scrollTop(); 

Um zu bestimmen, wie weit die iframe hat nach unten gescrollt.

+0

Danke Mann. das funktioniert wie ein Charme – mkoryak

+0

hat nicht für mich funktioniert, aber Eltern. $ ('Körper'). ScrollTop() hat den Job –

+0

Ich musste einen Wert für scrollTop, so eine kleine Anpassung: '$ (" html, body "). scrollTop (0);' –

19

Ich fand diese Frage beim Versuch, ScrollTop in einem iframe SET ... nicht genau Ihre Frage (Sie wollten GET) aber hier ist eine Lösung in Iframes für Leute, die auch hier enden, SET zu versuchen.

Wenn Sie oben auf der Seite scrollen möchten dies nicht in einem Iframe funktionieren:

$("html,body").scrollTop(0); 

Doch dies funktioniert:

document.getElementById("wrapper").scrollIntoView(); 

Oder die equivilent mit jQuery :

$("#wrapper")[0].scrollIntoView(); 

Für dieses Markup (enthalten insi de ein iframe):

<html> 
    <body> 
    <div id="wrapper"> 
     <!-- lots of content --> 
    </div> 
    </body> 
</html> 
+1

Danke für diesen Punkt @chris. Für Firefox funktionierte nur die DOM scrollIntoView für die Seite, die in einem iframe war (Google Chrome arbeitet nur mit $ ("body"). ScrollTop (0);). Für die JQuery-Liebhaber ist es $ ("# wrapper") [0] .scrollIntoView(); – rsmoorthy

+0

nur dieser scheint in IE8 zu arbeiten ... danke – handsomeGun

+1

sehr nett. von außerhalb des iframe 'document.getElementsByTagName ('iframe') [0] .contentWindow.document.getElementById ('myElementId'). scrollIntoView();' – billynoah

5

gute alte javascript:

scrollTop = document.getElementById(IFRAME_ID).contentWindow.document.body.scrollTop; 
+0

Funktioniert nicht, wenn JS im Iframe ausgeführt wird. – mikemaccana

+2

Für Javascript innerhalb der iframe, lassen Sie den Teil, der den iframe selbst zurückgibt: 'scrollTop = document.body.scrollTop;' –

25
$('#myIframe').contents().scrollTop() 
+0

Weiß nicht über OP, aber dies löste es für mich den ganzen Weg. Ich hatte es mit einem iframe zu tun, und vergaß völlig, scrollTop() auf den Inhalt anzuwenden. Duh! –

+0

Prost. Das funktioniert perfekt für meinen Fall - ein Iframe, der 100% des Ansichtsfensters mit einem geladenen Modal/Overlay belegt. Vielen Dank! –

+0

funktioniert nicht, Rückgabe null –

0

oder verwenden Sie dieses

sample.showLoader = function() { 
// show cursor wait 
document.getElementsByTagName('body')[0].style.cursor = 'wait'; 
var loader = $('#statusloader'); 
// check if we're runnign within an iframe 
var isIframe = top !== self; 
if (isIframe) { 
    var topPos = top.pageYOffset + 300; 
    // show up loader in middle of the screen 
    loader.show().css({ 
     top : topPos, 
     left : '50%' 
    }); 
} else { 
    // show up loader in middle of the screen 
    loader.show().css({ 
     top : '50%', 
     left : '50%' 
    }); 
} 
}; 
2
$('#myIframe').contents().scrollTop(0); 

Nur mit "0" als Parameter arbeitet

+0

Wenn das Argument '0' angegeben wird, wird der Rahmen nach oben (0 Pixel von oben) geblättert. Ohne das Argument wird die Anzahl der Pixel von oben zurückgegeben => darum geht es bei dieser Frage! –

0

Ich weiß, dass ich hier zu spät bin, aber ich habe versucht, das herauszufinden für eine lange Liste auf dem Handy. scrollTop() wurde nicht für mich arbeiten aufgrund Cross-Domain-Konflikte (und ich habe keinen Zugriff auf übergeordnete Fenster), aber die Höhe Wechsel tat

$('#someClickableElementInIFrame').on('click', function(e){ 
     $("html body").animate({ 
     'height' : "0" 
    }, { 
     complete: function(){ 
      $("html body").css({ 
      'height' : "auto" 
      }) 
      } 
     }) 
}); 
Verwandte Themen