Hej!
Jag behöver på något sätt ta reda på om en iframe har scroll eller inte. Det jag vill veta är alltså om sidan i framen är så pass lång att framen får en scroll
Någon som vet?
9 svar · 539 visningar · startad av vic
Hej!
Jag behöver på något sätt ta reda på om en iframe har scroll eller inte. Det jag vill veta är alltså om sidan i framen är så pass lång att framen får en scroll
Någon som vet?
Bara att mäta och jämföra total och synlig höjd (scrollsize och viewportsize).
Alla stora JS-libbar har stöd för detta crossbrowser, annars kan du kika på den här sidan för lite kod hur du skriver det själv.
http://codylindley.com/Webdev/295/javascript-get-page-height-with-scroll
ah nice, ska kika om jag får till det i morrn
Jag missade att förklara en sak i min fråga. Jag har en extern sida i min iframe och kan således inte komma åt sidans document objekt. Jag behöver alltså något som kan räkna ut om iframe-elementet i parentsidan får en scroll eller inte.
Då är det nog värre... Du kan ju iofs alltid parsa ut informationen på den sidan till din egen, men det kanske känns lite overkill.
nevermind.. missuppfattade... gör lite efterforskningar innan jag svarar.
Hade faktiskt tänkt att man på serversidan skulle läsa in och parsa sidan och utifrån det gissa på ett ungefär hur lång sidan blir men det känns lite overkill och även för osäkert för att det ska kännas lönt.
Visste faktiskt inte om begränsningarna i externa iframes. Antar att det är bra på ett sätt, men klart frustrerande till sånt här.
Om du prompt måste komma åt document behöver du nog göra en serversidewrapper för dokumentet tyvärr.
Varför behöver du veta om dokumentet scrollar eller inte till en början?
Tanken var att man skulle ha en funktion som returnerar sant/falskt beroende på om iframen har scroll. Då skulle man kunna göra en loop där man ökar framens höjd med XX pixlar tills det att funktionen returnerar falskt och man kommer då undan scrollen
Du kan ju göra följande med javascript så slipper du scrollen även om det kanske inte var detta du ville ha svar på.
Detta på sidan där iframe ligger i eller via en js fil.
<script type="text/javascript">
function getDocHeight(doc) {
var docHt = 0, sh, oh;
if (doc.height) docHt = doc.height;
else if (doc.body) {
if (doc.body.scrollHeight) docHt = sh = doc.body.scrollHeight;
if (doc.body.offsetHeight) docHt = oh = doc.body.offsetHeight;
if (sh && oh) docHt = Math.max(sh, oh);
}
return docHt;
}
function setIframeHeight(iframeName) {
var iframeWin = window.frames[iframeName];
var iframeEl = document.getElementById? document.getElementById(iframeName): document.all? document.all[iframeName]: null;
if ( iframeEl && iframeWin ) {
// helps resize (for some) if new doc shorter than previous
iframeEl.style.height = "auto";
var docHt = getDocHeight(iframeWin.document);
// need to add to height to be sure it will all show
if (docHt) iframeEl.style.height = docHt + 30 + "px";
}
}
function loadIframe(iframeName, url) {
if ( window.frames[iframeName] ) {
window.frames[iframeName].location = url;
return false;
}
else return true;
}
function goSetHeight() {
if (parent == window) return;
// no way to obtain id of iframe object doc loaded into? no parentNode or parentElement or ...
// ifrm is also the name om your ifram or frame.
else parent.setIframeHeight('DIN_IFRAME_NAMN_HÄR');
}
</script>
och sedan detta på sidan som du öppnar i din iframe.
<script type="text/javascript">
function goSetHeight() {
if (parent == window) return;
// no way to obtain id of iframe object doc loaded into? no parentNode or parentElement or ...
else parent.setIframeHeight('DIN_IFRAME_NAMN_HÄR');
}
</script>
samt detta i bodyn
onload="goSetHeight()
och på dina länkar anger du detta:
onclick="return loadIframe('DIN_IFRAME_NAMN_HÄR', this.href)
Detta är ett jobbigt sätt att lösa det på men då sätter koden höjden på sidan efter innehållet i den sidan som du vill visa i din iframes så slipper du tänka på det.