Avatar billede madx Nybegynder
22. februar 2001 - 09:22 Der er 20 kommentarer og
1 løsning

doc udenfor frameset vises i frameset

jeg søger en løsning på hvordan et doc vist udenfor framesettet henter framesettet og sig selv ind i framesettet

på http://www.echoecho.com/dk/jsframes02.htm er der en løsning, men kan det virkelig ikke gøres mere elegant - måske ved at bruge nogle document.write-sætninger, der udskriver et framset omkring det indlæste doc?
Avatar billede jakoba Nybegynder
22. februar 2001 - 09:58 #1
Nedenstående er inspireret af freepaqs måde at enforce frames.
Indsættes lige foran </head> i filer der bør være indrammet.

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

var madx_frameset = false;  // vælg passende variabelnavn for dit frameset

if (!parent.madx_frameset) { // hvis min parent ikke er det frameset
  madx_frameset = true;      // så gør jeg mig selv til det ønskede frameset
  document.write ( \"<frameset ...>\"
                  +\"  <FRAME src=\'\" +self.location,href +\"\' ... >\"
                  +\"  <FRAME src=\'default_for_anden_ramme.html\' ... >\"
                  +\"</frameset>\"
                  +\"<NOFRAMES>\"
                );
}; //endif

udskift \"...\" med diverse parametre du har for frameset og frames.
Det indsættes i alle de filer der kræver framesettet er der.

mvh http://www.fotx.net/JakobA
Avatar billede olebole Juniormester
22. februar 2001 - 10:06 #2
<ole>
Prøv at rette document.write-delen til :

document.write ( \"<frameset ...>\"
+\"  <FRAME src=\'\" +self.location.href +\"\' ... >\"
+\"  <FRAME src=\'default_for_anden_ramme.html\' ... >\"
+\"</frameset>\"
);

/mvh
</bole>
Avatar billede jakoba Nybegynder
22. februar 2001 - 10:32 #3
Olebole >> Tak. Nu jeg tænker kan jeg godt se noframes egentlig er overflødig (en browser der ikke forstår frames forstår heller ikke <noframes> :). Mere elegant.

madx >> Jeg glemte en linie tilsidst for at afslutte javascript sektionen:

// --> </script>

den bør være der.


Avatar billede olebole Juniormester
22. februar 2001 - 11:18 #4
jakoba >> Johhhhh....<noframes></noframes> er netop til de browsere, der ikke fatter frames - men der skal være et afslutnings-tag og noget tekst/grafik mellem tags\'ne, der skal vises i stedet for frames :)
....og så skal der være punktum mellem location og href :)
/mvh
Avatar billede jakoba Nybegynder
22. februar 2001 - 16:01 #5
Ja det punktum skal definitivt fixes.

Ideen er at resten af filen ER det der tekst/grafik så browsere uden frames blot ignorerer framesettet og viser filen.
Avatar billede olebole Juniormester
22. februar 2001 - 17:31 #6
Så skal </noframes> også skrives efter indholdet - på en eller anden måde :)
/mvh
Avatar billede jakoba Nybegynder
22. februar 2001 - 17:45 #7
Det bør det. Men hvis browseren er så gammel den ikke forstår <frameset> tagget vil den vel heller ikke forstå <noframes> tagget. Jeg mindes ikke nogen browser der bekymrer sig om printables efter et frameset tag; på det tidspunkt er valget mellem displayable <body og rammegenererende <frameset allerede gjort.

mvh JakobA
Avatar billede jakoba Nybegynder
22. februar 2001 - 18:41 #8
Men der er en til ting galt med forslaget ovenfor. NS prøver at loade fra cashe og det må den ikke.

<script language=\'javascript\'><!-- // indsæt scriptet i head 
var loadedFrame = false;
if ( !parent.loadedFrame ) { // hvis jeg ikke ligger i min ramme
  loadedFrame=true;        // så skriv rammen (pas på \' og \")
  document.write( \'<frameset cols=\"25%,*\">\'
                +\'  <frame name=\"minMenu\" src=\"expframemenu0.html\">\'
                +\'  <frame name=\"minMain\" \'
    +\'src=\"\'+((location.search.length>0)?location+\"&_\":location+\"?_\")+\'\">\'
                +\'</frameset>\'  );
};
// --></script>

knapt så kønt, men tested. NS3..NS6, Opera5, IE4
se:
http://hjem.get2net.dk/Jakob.Aggernaes/temp/expframemain0.html

mvh JakobA
Avatar billede madx Nybegynder
22. februar 2001 - 21:47 #9
Jeg har forsøgt begge de 2 løsninger. 1. forsalg kunne jeg slet ikke få liv i, men sidste virker tildels, den bygger rammer, men loader forkert contentfil... som jeg for \"sjov\" blot kalder frame.htm

der må være noget jeg kikser/misforstår...;-) mvh madx

koden se således ud

<script language=\'javascript\'><!--
var loadedFrame = false;
if ( !parent.loadedFrame ) {
  loadedFrame=true;
document.write(\' <frameset rows=\"100,*,50\" frameborder=\"0\" border=\"0\" framespacing=\"0\"> \'
+\' <frame src=\"../../at_top/attop.htm\" scrolling=\"NO\" name=\"TopFrame\" noresize frameborder=\"0\" title=\"Logoet\"> \'
+\' <frameset cols=\"225,*\" frameborder=\"0\" border=\"0\" framespacing=\"0\"> \'
+\' <frame src=\"../../at_menu/atmenu.htm\" scrolling=\"NO\" name=\"MenuFrame\" noresize title=\"Navigering\" frameborder=\"0\"> \'
+\' <frame src=\"\'+((location.search.length>0)?location+\"&_\":location+\"?_\")+\'\"> \'
+\' </frameset> \'
+\' <frame src=\"../../at_bund/atbund.htm\" scrolling=\"NO\" noresize name=\"BundFrame\" frameborder=\"0\" title=\"Adressen\"> \'
+\' <noframes> \'
+\' <body bgcolor=\"#FFFFFF\"> \'
+\' Her kommer noget \'
+\' </body> \'
+\' </noframes> \'
+\' </frameset> \' );
};
// -->
</script>
Avatar billede jakoba Nybegynder
22. februar 2001 - 22:33 #10
er det rigtigt at
  contentfil  ==  frame.htm  ==  den fil der indeholder scriptet?

og de andre filer loader ok, blot ikke den?

og at filerne ligger i diverse direktorier:

fælles/xxxxxx/yyyyyy/frame.htm
fælles/at_top/attop.htm
fælles/at_menu/atmenu.htm
fælles/at_bund/atbund.htm

for så ville jeg sige det burde virke.


mvh JakobA
Avatar billede jakoba Nybegynder
22. februar 2001 - 22:36 #11
Indeholder frame.htm yderligere frames?
Avatar billede madx Nybegynder
23. februar 2001 - 09:20 #12
  er det rigtigt at
contentfil  ==  frame.htm  ==  den fil der indeholder scriptet? ja

og de andre filer loader ok, blot ikke den? hmmm, jaaa, altså - jeg kan ikke se præcis hvad der foregår - der bliver loaded et frameset, hvor indholdet i alle frames svarer til index-framesettet, altså det frameset, der kommer når du loader index-filen i root-directory.

Adresselinien ændrer sig fra root/content/hvem_er/frame.htm > root/index.htm

jeg gætter på den simpelthen loader index-filen


og at filerne ligger i diverse direktorier:

fælles/xxxxxx/yyyyyy/frame.htm ja, hvor fælles er root-directory == root/content/hvem_er/frame.htm
fælles/at_top/attop.htm ja fælles/at_menu/atmenu.htm ja
fælles/at_bund/atbund.htm ja

for så ville jeg sige det burde virke. OK

hvad gør kodenlinien - eller snarere hvordan fungerer den
\' <frame src=\"\'+((location.search.length>0)?location+\"&_\":location+\"?_\")+\'\"> \'
mvh. madx
Avatar billede madx Nybegynder
23. februar 2001 - 11:24 #13
her er data fra logfilen - hvad der er indlæst:

content/hvem_er/frame.htm  at_files/at_types.css 
at_menu/atmenu.htm 
at_top/attop.htm 
content/hvem_er/frame.htm?_ 
index.htm 

dvs. at det der til sidst indlæses er index-filen

mvh madx
Avatar billede jakoba Nybegynder
23. februar 2001 - 12:25 #14
\' <frame src=\"\'+((location.search.length>0)?location+\"&_\":location+\"?_\")+\'\"> \'
tager den fuldstændige URL udaf location. med protokol, domæne, mappesti, filnavn, search parameter og hash parameter.

Eller rettere det skulle den. noget ku tyde på den ikke altid gør det :)

din logfil ser ud somom alt er fint. og så loader den pludselig \"/index.htm\" uden påviselig årsag.
Kunne det være at filen content/hvem_er/frame.htm indeholder noget javascript redirection der kunne blive aktiveret?

prøv med en
  alert(\"bygger rammer til: \" +location );

lige før eller efter linien
  loadedFrame=true;

så vi kan se hvad den prøver på.
Avatar billede jakoba Nybegynder
23. februar 2001 - 12:41 #15
Det kunne fx være en rest af et gammelt forsøg med en test af et \"hvis siden ikke er i ramme så hop til indgangssiden\" script.
Avatar billede madx Nybegynder
23. februar 2001 - 13:17 #16
problemet var \"hvis siden ikke er i ramme så hop til indgangssiden\" script i de andre filer i framesettet.

i øjeblikket bygges framesettet med udgangspunkt i content-filens directory - er det muligt at få scriptet til at bygge med udgangpunkt i root-directory

jeg har den bivirkning at når jeg navigerer til ny contentfil (i det byggede frameset) åbner et helt nyt vindue, blot med root/index.htm-framesettet i

hvis ikke, er konsekvensen vel at alle filer skal ligge i samme niveau?

mvh.
madx
Avatar billede jakoba Nybegynder
23. februar 2001 - 13:44 #17
ja. ved enten at angive fuldstændige adresser
  \"http://domæne/mapperbla/bla.htm\"
eller ved at angive \"fra domænet op\" adresser:
                    \"/mapperbla/bla.htm\"

desværre vil begge metoder ofte gøre det svært at teste lokalt.

mvh JakobA
Avatar billede jakoba Nybegynder
23. februar 2001 - 13:51 #18
jeg har den bivirkning at når jeg navigerer til ny contentfil (i det byggede frameset) åbner et helt nyt vindue, blot med root/index.htm-framesettet i

det burde ikke ske. med de samme scipt indlagt i alle de filer der skal ligge i det frameset (hvor boolean værdien hedder loadedFrame) skulle det være muligt at læse en ny fil ind i content-rammen uden besvær:
<a href=\"framenr2.htm>hent anden side</A>

mvh JakobA
Avatar billede madx Nybegynder
25. februar 2001 - 12:40 #19
selvfølgelig - du har ret...

når først alle content-filer har fået scriptet lagt ind danner de jo allesammen rammer...;-)

der er vel ikke noget der forhindrer, at jeg laver det til en funktion, som jeg kalder eksternt - jeg har et pænt antal filer der alle skal have implementeret præcis det sammen script... 
Avatar billede madx Nybegynder
25. februar 2001 - 12:41 #20
nå, men du har jo egl. svaret på det jeg først spurgte om, takker!
Avatar billede olebole Juniormester
25. februar 2001 - 13:01 #21
<ole>
Der er da fejl i denne linie:
  +\' <frame src=\"\'+((location.search.length>0)?location+\"&_\":location+\"?_\")+\'\"> \'
...den skal hedde:
  +\' <frame src=\"\'+((location.search.length>0)?location+\'&_\':location+\'?_\')+\'\"> \'
/mvh
</bole>
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