Avatar billede limemedia Nybegynder
13. september 2000 - 21:47 Der er 3 kommentarer og
1 løsning

Beregning af bredde på en anden frame i NN og IE

Jeg skal bruge bredden på \"main\" framen fra menu framen (samme frameset) så referencen er parent.main. Nedenstående er lide kopieret sammen uden seriøs test... Skal virke i NN og IE (JA, PÅ SAMME TID :D)


var layerWidth = 165;

if (document.layers) {
  var maxWidth = parent.main.window.innerWidth - layerWidth - 16;
} else if (document.all) {
  var maxWidth = parent.main.document.body.scrollWidth - layerWidth - 20;
}


CyberZoom, take it away :D Jeg ofrer points\'ne for CyberZoom. Derfor mit navn i spørgsmålet.
Avatar billede olebole Juniormester
14. september 2000 - 00:52 #1
<ole>

var maxWidth;
if (document.layers) {
  maxWidth = parent.main.window.innerWidth - layerWidth - 16;
} else if (document.all) {
  maxWidth = parent.main.document.body.offsetWidth - layerWidth - 20;
}

Men det må først kaldes, når man er stensikker på at der ER loaded et dokument i \'main\'. Ellers kan IE ikke finde bredden (bruger body i beregningen). Hvis det skal fyres af i en funktion, skal variablen deklareres globalt, dersom den skal bruges i andre funktioner - derfor er den trukket ud for sig selv.

/mvh
</bole>
Avatar billede olebole Juniormester
14. september 2000 - 00:53 #2
...og så er det nok meget godt at sætte lidt (), således:
    maxWidth = (parent.main.window.innerWidth - layerWidth) - 16;
og ligeså i den anden linie  ;o)
Avatar billede limemedia Nybegynder
16. september 2000 - 20:47 #3
ole >>

if (parent.main) {
  if (document.layers) {
    maxWidth = parent.main.window.innerWidth - layerWidth - 16;
  } else if (document.all) {
    maxWidth = parent.main.document.body.offsetWidth - layerWidth - 20;
  }
}

virker perfekt.
Avatar billede olebole Juniormester
16. september 2000 - 20:57 #4
Pas på, Lars! Hvad nu \'if not parent.main\'...kan du følge mig? Så får du aldrig sat din maxWidth.
Hvis doukumentet ikke er indlæst, når du tester for det, må du \'vende tilbage\' med en setTimeout, der kører script-delen igen. Det kan du gøre ved at indkapsle det i en funktion med din \'if\' sætning plus en \'else\', der laver setTimeout\'en - der kører funktionen igen efter 1-2 sekunder. Altså:

function setWidth() {
if (parent.main) {
  if (document.layers) {
    maxWidth = parent.main.window.innerWidth - layerWidth - 16;
  } else if (document.all) {
    maxWidth = parent.main.document.body.offsetWidth - layerWidth - 20;
  }
} else {
  setTimeout(\"setWidth()\",2000);
}
}

/mvh
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