可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
jQuery's scrollTop returns null when window is an iframe. Has anyone been able to figure out how to get scrollTop of an iframe?
more info:
my script is running in the iframe itself, the parent window is on another domain, so I can't access the ID of the iframe or anything like that
回答1:
You can set scrollTop
by using this setup:
$("html,body").scrollTop(25);
So you could try getting it like this:
$("html,body").scrollTop();
Because different browsers set the scrollTop
on different elements (body or html).
From the scrollTo plugin:
But that will probably still fail in certain browsers. Here is the relevant section from the source code of 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; }); };
You may then run:
$(window)._scrollable().scrollTop();
To determine how far the iframe has scrolled down.
回答2:
$('#myIframe').contents().scrollTop()
回答3:
I found this question while trying to SET scrollTop inside an iframe... not exactly your question (you wanted to GET) but here's a solution inside iframes for people that also end up here trying to SET.
If you want to scroll to the top of the page this will NOT work inside an iframe:
$("html,body").scrollTop(0);
However, this will work:
document.getElementById("wrapper").scrollIntoView();
Or the equivilent with jQuery:
$("#wrapper")[0].scrollIntoView();
For this markup (contained inside an iframe):
回答4:
Good old javascript:
scrollTop = document.getElementById(IFRAME_ID).contentWindow.document.body.scrollTop;
回答5:
$('#myIframe').contents().scrollTop(0);
Only works with "0" as parameter
回答6:
or use this one
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%' }); } };
回答7:
I know I'm late to the game here, but I was trying to figure this out for a long list on mobile. scrollTop() wasn't working for me due to cross-domain conflicts(and I didn't have access to parent window), but changing the height did:
$('#someClickableElementInIFrame').on('click', function(e){ $("html body").animate({ 'height' : "0" }, { complete: function(){ $("html body").css({ 'height' : "auto" }) } }) });