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
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.
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>
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.
262 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2