iFrameHeight i.c.m. Uitklappen van tekst.

Status
Niet open voor verdere reacties.

zekestijl

Nieuwe gebruiker
Lid geworden
14 jan 2010
Berichten
4
Hoi,

Ik ben bezig met tekstjes te maken d.m.v. 'uitklappen'.
Dat scriptje heb ik hier gevonden.

Nu stuit ik op het probleem dat dit niet werkt in combinatie met een iFrameHeight scriptje.

Dit script zorgt ervoor dat het inlineframe automatisch langer wordt naar mate er meer tekst is. Zodat er nooit scroll balken getoond worden.
Maar als ik nu de tekst 'uitklap' dan wordt het frame niet langer.

Iemand een oplossing hiervoor?

Dit is het iFrameHeight script:


<script language="javascript" type="text/javascript">
//onload = iFrameHeight;
function iFrameHeight() {
var h = 0;
if ( !document.all ) {
h = document.getElementById('maintext').contentDocument.height;
document.getElementById('maintext').style.height = h + 60 + 'px';
} else if( document.all ) {
h = document.frames('maintext').document.body.scrollHeight;
document.all.maintext.style.height = h + 20 + 'px';
}
}
</script>
 
Hoi zekestijl,
In principe zouden de twee scripts elkaar niet dwars moeten zitten. Het uitklap-script is alleen een AAN/UIT switch, die de display-eigenschap van het iframe bedient ("none" of "block").
Het iFrameHeight-script regelt alleen de hoogte van het iframe, en er zit geen display-verandering in.

Vraag 1:
Als je het uitklap-script even buiten werking zet, doet het iFrameHeight-script het dan wel goed?

Vraag 2:
Als ja, dan zit het toch in de combinatie. Kan je dan even een link geven, zodat we alle codes kunnen natrekken?

Vraag 3:
Kan je het blokje van het iframe niet vervangen door een php-include? Dan rekt de hoogte automatisch mee, en hoeft het hele iFrameHeight-script niet gebruikt te worden. :)

Met vriendelijke groet,
CSShunter
 
beide scripts werken nu ook gewoon.
verschijnen geen foutmeldingen.

het probleem zit 'm in het feit het iFrameHeight script wordt uitgevoerd als de pagina wordt geladen. en dan zijn alle tekstjes 'ingeklapt'. als de tekst wordt uitgeklapt wordt iFrameHeight script niet meer aangeroepen en dus wordt het frame ook niet langer.

ik gebruik het iFrame juist om verschillende pagina's in te openen. dus PHP include gaat in dit geval niet op.
 
Tja, als de wissel tussen { display:none; } en { display:block; } niet werkt, moeten we wat anders verzinnen. Aldus:
  • We blijven van de display-property af.
  • We schuiven het iframe gezellig naast het beeldscherm met { left: -9999px; }.
  • We vernietigen de ingenomen hoogte met { position: absolute; }.
  • We herschrijven het toggle-script om de left/position eigenschappen on-the-fly te wisselen.
  • We plaatsen het hele script onderaan, vlak voor de </body> (dan hoeven we geen extra functie + body-onload te maken voor het toggle script).
En dan hebben we een:
Zo werkt de combi ... voor zover de afzonderlijke componenten werkten.

MAAR ... nu blijkt bij m'n laatste check dat je de afzonderlijke componenten niet eerst op hun deugdelijkheid had getest alvorens deze operatie te beginnen. Daar was ik eigenlijk van uitgegaan...
  • Het toggle-script is o.k., maar het iFrameHeight-script is wel valid html, maar niet cross-browser.
  • Enkele testresultaten: Internet Explorer 6 weigert dienst, IE7 doet het, FF3 doet het ook, Chrome ook, en Safari ook. Maar Opera (9.64) niet. :confused:
En nu krijg ik een ontzettende honger: het zal een maaltje gebakken peren worden, denk ik. ;)

Met vriendelijke groet,
CSShunter
 
Aha zekestijl,
Ik zie het probleem.
  • Waar ik aan zat te denken, was zoiets.
D.w.z. het "omgekeerd denken". In plaats van een hoofdpagina met wisselende iframes erbinnen, maak je de oorspronkelijke iframe-pagina's stuk voor stuk tot hoofdpagina's, waarin je dan de vaste elementen inhangt met php.
In het voorbeeld heb ik alleen een #header als vast element gebruikt, maar je kan er op dezelfde manier een vaste linker- en/of rechterkolom naast zetten. Of een #footer eronder plaatsen, die dan ook netjes meeschuift als de content groter wordt (al dan niet na uitklappen).

Voorwaarde/nadeel is wel, dat de content "eigen content" moet zijn, zodat je de huidige iframe-pagina's kunt omzetten. Als het gaat om iframe's die pagina's van andere sites aftappen, kan dit niet. Dan zal je vastzitten aan een tweede scrollbar als die pagina te hoog is (tenzij een geniaal scriptoloog nog een javascript weet te ontwikkelen waardoor dit toch kan; ik ben dat niet, maar het lijkt me ook moeilijk/onmogelijk om cross-domein te scripten; providers hebben het daar niet zo op vanwege hun veiligheid). - En tegen aftappen zijn ook andere bezwaren. ;)

Voordeel van het voorbeeld is, dat je geen frames gebruikt, en alle pagina's goed toegankelijk zijn, zowel voor zoekmachines als voor mensen.
En dat je voor het doorklikken naar andere pagina's geen javascript nodig hebt, dat vinden zoekmachines en mensen ook heel prettig. En dat je voor de automatische hoogtebepaling evenmin van javascript afhankelijk bent (waarbij het script sowieso niet werkt in IE6 en Opera).
En dat je makkelijk een rechtstreekse link naar een vervolgpagina kunt opgeven, dat is ook niet te versmaden! :)

Hopelijk heb ik nu goed begrepen wat je wilt; maar ik begrijp nog niet waarom je dit zo wilt. Anders moet je nog even wat preciezer aangeven waarom het persé iframes zouden moeten zijn. Dan valt er misschien nog een andere uitweg te verzinnen.

Met vriendelijke groet,
CSShunter
 
ik heb er ook al vaker over nagedacht om php over te gaan.
maar ik vind het gewoon te lastig en zo'n iframe daarintegen lekker makkelijk.

ik laat m'n fotoalbum bijv. door web album generator maken, en dat gaat dan al niet meer als ik van php include gebruik maak.

wat betreft voordelen met zoekmachines heb je inderdaad gelijk.

maar ik ga het voorlopig anders oplossen door de pagina al een langere lengte mee te geven dan in eerste instantie nodig is. hierdoor hoeft Iframe niet niet nog eens langer te worden als de tekstjes worden uitgeklapt.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan