webForumDet fria alternativet

Kolla om en iframe har scroll eller inte?

9 svar · 539 visningar · startad av vic

vicMedlem sedan apr. 2006244 inlägg
#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?

effataMedlem 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

vicMedlem sedan apr. 2006244 inlägg
#3

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

vicMedlem 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.

KrikoMedlem 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.

effataMedlem sedan apr. 2008137 inlägg
#6

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

vicMedlem 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.

effataMedlem 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?

vicMedlem 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

MegamanMedlem 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.

142 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)