如何获得iframe的scrollTop

当window是iframe时,jQuery的scrollTop返回null。 有没有人能够弄清楚如何获得iframe的scrollTop?

更多信息:

我的脚本在iframe本身运行,父窗口在另一个域上,所以我无法访问iframe的ID或类似的东西

您可以使用此设置设置scrollTop

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

所以你可以试试这样:

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

因为不同的浏览器在不同的元素(body或html)上设置scrollTop

来自scrollTo插件:

但在某些浏览器中,这可能仍会失败。 以下是Ariel Flesher的jQuery scrollTo插件源代码的相关部分:

 // 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; }); }; 

然后你可以运行:

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

确定iframe向下滚动的距离。

 $('#myIframe').contents().scrollTop() 

我在尝试在iframe中设置scrollTop时发现了这个问题…不完全是你的问题(你想要获取)但是这里的iframes里面的解决方案对于那些也最终在这里试图设置的人来说。

如果您想滚动到页面顶部, 这将无法在iframe中使用:

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

但是,这将有效:

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

或者与jQuery等效:

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

对于此标记(包含在iframe中):

   

好旧的javascript:

 scrollTop = document.getElementById(IFRAME_ID).contentWindow.document.body.scrollTop; 
 $('#myIframe').contents().scrollTop(0); 

仅适用于“0”作为参数

或使用这个

 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%' }); } }; 

我知道我已经迟到了这个游戏,但是我试图在移动设备上找到一个很长的列表。 由于跨域冲突(我无法访问父窗口),scrollTop()不能为我工作,但更改高度确实:

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