webForumDet fria alternativet

Kolla om en iframe har scroll eller inte?

JavaScript

9 svar · 539 visningar · startad av vic

Medlem sedan apr. 2006244 inlägg
Frågan#1

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?

Medlem sedan apr. 2008137 inlägg
#2

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

Medlem sedan apr. 2006244 inlägg
#3

ah nice, ska kika om jag får till det i morrn

Medlem sedan apr. 2006244 inlägg
#4

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.

Medlem sedan dec. 2006382 inlägg
#5

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.

Medlem sedan apr. 2008137 inlägg
#6

nevermind.. missuppfattade... gör lite efterforskningar innan jag svarar.

Medlem sedan apr. 2006244 inlägg
#7

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.

Medlem sedan apr. 2008137 inlägg
#8

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?

Medlem sedan apr. 2006244 inlägg
#9

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

Medlem sedan jan. 2004118 inlägg
#10

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.

262 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)