Avatar billede dotcom1 Nybegynder
06. oktober 2006 - 14:29 Der er 10 kommentarer og
1 løsning

Dynamisk resizable iframe script - viker ikke optimalt i FF

Hej.

Jeg bruger dette script fra Dynamic Drive:

<!--
/***********************************************
* IFrame SSI script II-  Dynamic Drive DHTML code library (http://www.dynamicdrive.com)
* Visit DynamicDrive.com for hundreds of original DHTML scripts
* This notice must stay intact for legal use
***********************************************/

//Input the IDs of the IFRAMES you wish to dynamically resize to match its content height:
//Separate each ID with a comma. Examples: ["myframe1", "myframe2"] or ["myframe"] or [] for none:
var iframeids=["myframe", "myframe2", "myframe3", "myframe4", "myframe5"]

//Should script hide iframe from browsers that don't support this script (non IE5+/NS6+ browsers. Recommended):
var iframehide="yes"

var getFFVersion=navigator.userAgent.substring(navigator.userAgent.indexOf("Firefox")).split("/")[1]
var FFextraHeight=parseFloat(getFFVersion)>=0.1? 16 : 0 //extra height in px to add to iframe in FireFox 1.0+ browsers

function resizeCaller() {
var dyniframe=new Array()
for (i=0; i<iframeids.length; i++){
if (document.getElementById)
resizeIframe(iframeids[i])
//reveal iframe for lower end browsers? (see var above):
if ((document.all || document.getElementById) && iframehide=="no"){
var tempobj=document.all? document.all[iframeids[i]] : document.getElementById(iframeids[i])
tempobj.style.display="block"
}
}
}

function resizeIframe(frameid){
var currentfr=document.getElementById(frameid)
if (currentfr && !window.opera){
currentfr.style.display="block"
if (currentfr.contentDocument && currentfr.contentDocument.documentElement.scrollHeight) //ns6 syntax
currentfr.height = currentfr.contentDocument.documentElement.scrollHeight+FFextraHeight;
else if (currentfr.Document && currentfr.Document.body.scrollHeight) //ie5+ syntax
currentfr.height = currentfr.Document.body.scrollHeight;
if (currentfr.addEventListener)
currentfr.addEventListener("load", readjustIframe, false)
else if (currentfr.attachEvent){
currentfr.detachEvent("onload", readjustIframe) // Bug fix line
currentfr.attachEvent("onload", readjustIframe)
}
}
}

function readjustIframe(loadevt) {
var crossevt=(window.event)? event : loadevt
var iframeroot=(crossevt.currentTarget)? crossevt.currentTarget : crossevt.srcElement
if (iframeroot)
resizeIframe(iframeroot.id);
}

function loadintoIframe(iframeid, url){
if (document.getElementById)
document.getElementById(iframeid).src=url
}

if (window.addEventListener)
window.addEventListener("load", resizeCaller, false)
else if (window.attachEvent)
window.attachEvent("onload", resizeCaller)
else
window.onload=resizeCaller
//-->

Det virker perfekt i IE, men i Firefox, se eksempel: http://komfrisk.dk/test/index.php

Er der nogen, der har en idé til hvordan det kommer til at virke i Firefox?

Mvh.
Avatar billede roenving Novice
06. oktober 2006 - 17:20 #1
-- hvis det ikke virker, må vi nok se et 'levende' eksempel og ikke nogle billeder !-)
Avatar billede mclemens Nybegynder
06. oktober 2006 - 17:34 #2
Som Rønving siger er det svært at se uden levende eksempel at lege på...

Regner med at denne ramme FF:
if (currentfr.contentDocument && currentfr.contentDocument.documentElement.scrollHeight) //ns6 syntax
currentfr.height = currentfr.contentDocument.documentElement.scrollHeight+FFextraHeight;

... den kunne måske rettes til :

if (currentfr.contentDocument && currentfr.contentDocument.documentElement.scrollHeight){ //ns6 syntax
currentfr.height = 1;
currentfr.parentNode.style.height="auto";
currentfr.height = currentfr.contentDocument.documentElement.scrollHeight+FFextraHeight;
}

eller

if (currentfr.contentDocument && currentfr.contentDocument.documentElement.scrollHeight){ //ns6 syntax
currentfr.style.height = "1px";
// currentfr.parentNode.style.height="1px"; // <- måske nødvendig?
// currentfr.parentNode.style.height="auto"; // <- eller måske denne eller begge samtidig?
currentfr.height = currentfr.contentDocument.documentElement.scrollHeight+FFextraHeight+"px";
}


... overvej et link til noget live ...
Avatar billede mclemens Nybegynder
06. oktober 2006 - 17:36 #3
i den sidste linje af ovenstående indlæg skulle
currentfr.height = currentfr.contentDocument.documentElement.scrollHeight+FFextraHeight+"px";
have været
currentfr.style.height = currentfr.contentDocument.documentElement.scrollHeight+FFextraHeight+"px";
Avatar billede dotcom1 Nybegynder
07. oktober 2006 - 16:56 #4
>> mclemens: Jeg er imponeret - det er næsten perfekt! Som du kan se her http://komfrisk.dk/test/ så er der nu kun ca. én cm. luft nederst i hver iframe i Firefox. jeg kan fint leve med det, som det er nu, men kan det evt. fjernes? (Begge dine forslag giver samme resultat, så vidt jeg kan se - i eksemplet har jeg brugt det første.)
Avatar billede mclemens Nybegynder
07. oktober 2006 - 17:04 #5
Umiddelbart vil jeg skyde på at det er denne linje der skal pilles ved:

var FFextraHeight=parseFloat(getFFVersion)>=0.1? 16 : 0 //extra height in px to add to iframe in FireFox 1.0+ browsers

^ - prøv at den linje til:

var FFextraHeight=0;

(før fik den nok værdien 16 px ekstra ...)

... hjælper det ?
Avatar billede mclemens Nybegynder
07. oktober 2006 - 17:06 #6
Hvis det er hjælper kan du vælge helt at slette linjen samt rette denne linje:
currentfr.contentDocument.documentElement.scrollHeight+FFextraHeight;

til:

currentfr.contentDocument.documentElement.scrollHeight;

... men intet er slettet da jeg koder i blinde :D
Avatar billede dotcom1 Nybegynder
07. oktober 2006 - 17:10 #7
Dit første bud ser ud til at virke! Du er for sej. :)
Avatar billede dotcom1 Nybegynder
07. oktober 2006 - 17:13 #8
Læg et svar. :)
Avatar billede mclemens Nybegynder
07. oktober 2006 - 17:13 #9
Takker her er lige et svar :o)
Avatar billede dotcom1 Nybegynder
07. oktober 2006 - 17:14 #10
Mange tak for hjælpen.
Avatar billede mclemens Nybegynder
07. oktober 2006 - 17:15 #11
Velbekom, og tak for point :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

IT-Universitetet i København

CIO

Capgemini Danmark A/S

IGNITE Graduate Program 2026

Ringkjøbing Landbobank – Nordjyske Bank

Forretningsudvikler til procesoptimering