Avatar billede brock Nybegynder
27. september 2000 - 20:21 Der er 13 kommentarer og
1 løsning

load layer i anden frame

Jeg har et problem med et layerskift, som jeg har fundet på steinmans hjemmeside

mit framesæt består af 3 frames
1) Nav
2) Main
3) action

I min action-frame kalder jeg scriptet

<script language=\"JavaScript\">
<!--

ns4 = (document.layers)? true:false
ie4 = (document.all)? true:false

function load(page) {
    if (ns4) parent.Main.document.textLayer.src = page
    else if (ie4) parent.Main.textFrame.document.location = page

}
function loadFinish() {
//if (ie4) parent.Main.document.all.textDiv.innerHTML = parent.Main.textFrame.document.body.innerHTML
        }

//-->
</SCRIPT>

med

<a href=\"java script:load(\'load1-text.asp\')\"  onFocus=\"this.blur()\">test</a>

load1-text.asp ser sådan her ud:

<html>
<head>
<title>Content Page</title>
<script language=\"JavaScript\">
<!--

ns4 = (document.layers)? true:false
ie4 = (document.all)? true:false

function back() {
if (ie4) parent.action.loadFinish()
}
//-->
</SCRIPT>

</head>

<body onload=\"java script:back()\" leftmargin=\"0\" topmargin=\"0\" marginwidth=\"0\" marginheight=\"0\">
<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" vspace=\"0\" hspace=\"0\" width=\"375\">
  <tr>
    <td height=\"21\" valign=\"top\" >dfgdfg </td>
    <td height=\"21\" width=\"10\"></td>
    <td height=\"21\" width=\"150\" align=\"left\" valign=\"top\">&nbsp; </td>
  </tr>
</table>
</body>
</html>


nu kommer spørgsmålet - skidtet virker i Netscape men ikke i IE - og jeg kalder jo layeret som ligger i Main framen - så hvorfor sker der intet ???
Avatar billede brock Nybegynder
27. september 2000 - 20:22 #1
NB:
i main frame ligger

(før body)
<!--
#textDiv {position:absolute; top:75; left:320; width:375;}
-->
</STYLE>


----------------------------------------

(i body)
<LAYER NAME=\"textLayer\" TOP=75 LEFT=315 WIDTH=375 ></LAYER>
<DIV  ID=\"textDiv\">jhk</DIV>
<IFRAME STYLE=\"display:none\" NAME=\"textFrame\" ></IFRAME>
Avatar billede geeeet Nybegynder
27. september 2000 - 20:25 #2
Måske fordi du har udkommenteret denne linie:

//if (ie4) parent.Main.document.all.textDiv.innerHTML = parent.Main.textFrame.document.body.innerHTML

som skal sætte innerHTML i dit textDiv

/Geeeet
Avatar billede geeeet Nybegynder
27. september 2000 - 20:27 #3
Eller:

<IFRAME STYLE=\"display:none\" NAME=\"textFrame\" ></IFRAME>

display:none???

Så forstår jeg bedre :-)

Prøv med:

<IFRAME NAME=\"textFrame\"></IFRAME>

/Geeeet
Avatar billede geeeet Nybegynder
27. september 2000 - 20:27 #4
Tror mest på den sidste...

/Geeeet
Avatar billede brock Nybegynder
27. september 2000 - 20:44 #5
Linien som var udkommenteret var en fejl fra min side og er kommenteret - det med display:none har desværre intet med sagen at gøre - det er java scriptet den kniber med (har selvfølgelig lige prøvet for en sikkerheds skyld at ændre iframe tagget - NO succes ) - ærgeligt :(
Avatar billede geeeet Nybegynder
27. september 2000 - 20:47 #6
Skal du have teksten i dit div eller din iframe???

/Geeeet
Avatar billede olebole Juniormester
27. september 2000 - 22:39 #7
<ole>
Prøv:

function back() {
if (ie4) parent.parent.action.loadFinish()
}

En anden god idé - hvis man gerne vil have den vist på Mac i IE før vers.5.0 - er at kalde i bunden af den side, du loader ind.
\'onload\' kald fra body\'en i en skjult <IFRAME> funker ikke i den platforms/browser-kombi. Derfor kan du i bunden af siden skrive:

<script language=\"JavaScript\">if (ie4) parent.parent.action.loadFinish();</script>
</body>
</html>

...det vil virke.
Dan Steinman er iøvrigt opmærksom på problemet selv, men påpeger, at der er flere af den slags fejl, da IE er kommet med ikke mindre end 5-6 forskellige Document Object Models siden vers. 4.0!
/mvh
</bole>
Avatar billede brock Nybegynder
28. september 2000 - 09:54 #8
Hej Ole Bole - det virkede heller ikke med:

if (ie4) parent.parent.action.loadFinish()

ej heller

if (ie4) parent.action.loadFinish()

den IE-browseren klikker godt nok, som virkede skidtet (du ved 3-4 hurtige klik) men det virkede ganske simpelt ikke i IE (endnu) - jeg tror fejlen ligger i midt layer-kald

function load(page) {
    if (ns4) parent.Main.document.textLayer.src = page
    else if (ie4) parent.Main.textFrame.document.location = page

}
function loadFinish() {
//if (ie4) parent.Main.document.all.textDiv.innerHTML = parent.Main.textFrame.document.body.innerHTML
        }


hmmm

Avatar billede brock Nybegynder
28. september 2000 - 09:56 #9
geeet: Begge - scriptet er \"cross-browser\" og fungerer ganske fint hvis jeg kalder det ind i samme frame, hvor layers er, men så snart jeg prøver at smide det ind i en anden frame skrider det fra hinanden (bortset fra NS)
Avatar billede brock Nybegynder
28. september 2000 - 10:02 #10
fandt selv løsningen

<script language=\"JavaScript\">
<!--

ns4 = (document.layers)? true:false
ie4 = (document.all)? true:false

function load(page) {
    if (ns4) parent.Main.document.textLayer.src = page
    else if (ie4) parent.action.textFrame.document.location = page

}
function loadFinish() {
if (ie4) parent.Main.document.all.textDiv.innerHTML = parent.action.textFrame.document.body.innerHTML
        }

//-->
</SCRIPT>
Avatar billede brock Nybegynder
28. september 2000 - 15:18 #11
men jeg lader dog spørgsmålet stå åben, for nu har jeg det problem, at når jeg resizer vinduet dropper netscape layeren og kan ikke huske javaordren load - ??? -
Avatar billede olebole Juniormester
28. september 2000 - 15:41 #12
Jamen, selvfølgelig kan vi da ikke give dig svaret på et spørgsmål, du ikke stiller!
I din kommentar \' 27-09 2000 20:22:52 \' skriver du, din <IFRAME> ligger i \'main\'. Det passer ikke, hvis det script ovenfor virker - den ligger jo i \'action\'!...Fandens til forskel  :o)

Iøvrigt bør du stadig overveje at undlade \'onload\' kald, men lægge kaldet i bunden af siden, så alle kan se det.

// Netscape Resize Fix
    if (document.layers) {
            widthCheck = window.innerWidth
            heightCheck = window.innerHeight
            window.onResize = resizeFix
    }
    function resizeFix() {
            if (widthCheck != window.innerWidth || heightCheck != window.innerHeight)
            document.location.href = document.location.href
    }

/mvh
Avatar billede brock Nybegynder
28. september 2000 - 17:14 #13
OleBole - hehe

Den ligger både i action og i main - det var den eneste måde, jeg kunne få scriptet til at virke på - nemlig at lave identiske layers/iframes i hhv. main/action og så \"flytte\" den kreerede layer fra action over i main - Jeg kan godt se nu, at det ikke lige fremgik af svaret, men det er løsningen - kunne simpelthen ikke løse det på andre måder (siger dermed ikke at det er den mest elegante eller korrekte eller eneste måde eller ....) nå men jeg rydter op til sidst angående onload functionen (som vi faktisk har talt om i et andet spørgsmål for lang tid siden )

og tak for scriptet - det var lige hvad jeg manglede

med venlig hilsen

Brock
Avatar billede olebole Juniormester
28. september 2000 - 18:33 #14
Jeg har ikke så meget tid i disse dage til at teste, men mail mig privat om en uges tid (det kan være, jeg ellers glemmer dig), så skal jeg se på problemet...det MÅ kunne lade sig gøre lidt mere \'elegant\'  ;o)

Ja, jeg har nævnt det for en del her på Eksperten efterhånden...kunne ikke lige huske, om du var blandt dem (undskyld, men der ryger mange svar af panden...Hehe!).

Takken, bør vel retteligt tilfalde Steinman - script\'et er \'tyv-hugget\' fra hans \'dynduo\'-tutorial.
/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