Toon posts:

Menu & Frames

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met een nieuwe layout te maken voor mijn website (eentje met een LCARS layout). Het menu zelf moet ik nog bouwen, maar ik loop nu al ergens tegen aan waar ik niet helemaal uitkom. Hopelijk kan iemand me hier een handje mee helpen.

Ik heb het volgende al in elkaar gezet:
index.html - laad beide frames
main.html - laat de openings pagina zien
top.html - het menu

Maar nu, stel iemand roept de main.html file aan (bijv. via Google ofzo). Dan zit daar uiteraard het menu niet bij. Ik heb al wat rond gezocht op internet en het volgende stukje code gevonden:

code:
1
2
3
4
5
6
7
8
9
10
11
<script type="text/javascript" language="javascript">
function index_go()
{
  if (top.location == location)
  { 
    top.location.href = "http://www.starbase01.com/index.html";
  } 
}
</script>

<BODY onload="index_go()">


Dit werkt wel in het geval van de main.html file, maar stel iemand roept een andere file aan (disclaimer.html bijv.) dan krijg je dus de start pagina te zien.
Dat wil ik dus niet.

Hoe kan ik er voor zorgen dat wanneer iemand disclaimer.html opent niet naar de startpagina word terug geleid en dat de browser gewoon het top.html bestandje inlaad?
PHP e.d. kan ik niet echt dus dat is helaas (nog) geen optie voor me.

-edit-
Ik heb 't e.a. online gezet ter verduidelijking: http://www.starbase01.com/index3.html

De disclaimer zit in de onderste balk (die met het ©-teken).
Het menu wat in de disclaimer verschijnt hoort bij de huidige layout en zal uiteraard verdwijnen zodra het bovenstaand probleem is opgelost.

[ Voor 18% gewijzigd door crisp op 25-10-2003 17:55 . Reden: code fix ]


Verwijderd

Nog nooit geprobeerd, maar je zou kunnen proberen om de huidige locatie in de search (achter een '?') mee te geven aan je frameset pagina.
code:
1
2
3
4
5
6
7
8
function index_go()
{
  if (top.location == location)
  { 
    top.location.href = "http://www.starbase01.com\
        /index.html?location="+location;
  } 
}

Onload in je frameset kun je dan de search uitlezen (met location.search) en als die bestaat, de url doorgeven aan je main frame.

Peter Paul Koch heeft min of meer dezelfde oplossing:
Zonder frames: Hierin staat bovenin een link naar de goede pagina binnen de frameset.

  • creative8500
  • Registratie: September 2001
  • Laatst online: 03-01 16:54

creative8500

freedom.

Werkende non-oplossing: weg met de frames. Dan is je site meteen een stuk handiger in gebruik, lijkt me. Ikzelf vind frames eigenlijk nooit handig, en waar ik het wel mooi en nuttig vind1 kan het ook met CSS2 worden opgelost:
code:
1
div { overflow: auto; }

1. // hicksdesign
2. CSS2 Specification

Verwijderd

Topicstarter
Zelf werk ik nu ook niet met frames, heb er eerlijk gezegd ook een hekel aan.
Maar zie nu gewoon geen andere oplossing met mijn nieuwe layout idee.
Ik zal eens gaan kijken wat dat CCS e.d. allemaal is.

  • Millennyum
  • Registratie: Januari 2001
  • Laatst online: 04-05-2023
Dat probleem had ik met mijn site ook. Ik gebruik idd een '?' tag om door te geven welke page hij in het frame moet laden.

code:
1
2
3
4
5
6
<script type="text/javascript" language="JavaScript">
<!--
  if (top == self || (parent.frames[1].name != 'Top'))
    top.location.href = 'http://www.alice-in-wonderland.net?alice.html';
//-->
</script>
voor op de pagina die geladen moet worden, in dit geval alice.html

en

code:
1
2
3
4
5
6
7
8
9
10
11
12
<script language="JavaScript">
<!--
 function checkorigin()
 {
 var url = (parent.location.search ? unescape(parent.location.search.substring(1)):'main.html');
 if (url != "main.html")
  {
  window.parent.Main.location.href = "http://www.student.kun.nl/l.derooy/" + url;
  }
 }
//-->
</script>

voor op de main.html Met natuurlijk
code:
1
<body OnLoad="return checkorigin()">
erbij.

Wat er nu gebeurt, is dus dat hij eerst je startpagina laadt en vervolgens daar meteen de goede, oorspronkelijk aangeroepen pagina overheen laadt. Op mijn main page staat namelijk een teller, op deze manier telt hij ook bezoekers die via een andere pagina op mijn site komen.

Het is misschien iets ingewikkelder dan nodig, maar dat komt vanwege andere omstandigheden (enkele pagina's van de site staan op een andere server, de ene op alice-in-wonderland.net en de andere op student.kun.nl :) )

[ Voor 34% gewijzigd door crisp op 25-10-2003 17:56 . Reden: code fix ]


Verwijderd

Topicstarter
Ik heb je scripje geprobeerd maar kom er niet helemaal uit.
Ik heb de volgende files + aanpassingen:

index3.html - deze laad het framework, staan dus de links in naar de top.html & main.html
main.html - laat de pagina met de planeet e.d. zien + de © bar.
top.html - het menu + Online balk.
tester.html - test file.

In main.html heb ik de volgende code gezet:

HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<script language="JavaScript">
<!--
 function checkorigin()
 {
 var url = (parent.location.search ? unescape(parent.location.search.substring(1)):'main.html');
 if (url != "main.html")
  {
  window.parent.Main.location.href = "http://www.starbase01.com/" + url;
  }
 }
//-->
</script>

<body OnLoad="return checkorigin()">


In tester.html de volgende regels code:

HTML:
1
2
3
4
5
6
<script type="text/javascript" language="JavaScript">
<!--
  if (top == self || (parent.frames[1].name != 'Top'))
    top.location.href = 'http://www.starbase01.com?index3.html';
//-->
</script>


Wanneer ik nu http://www.starbase01.com/tester.html open dan verschijnt http://www.starbase01.com/index.html (de huidige index page, die nog niet vervangen kan worden).

Alle files staan in de root van de site (behalve de plaatjes, maar die werken wel).
Wat doe ik fout? Begin me er nu aardig blind op te staren...

[ Voor 23% gewijzigd door crisp op 25-10-2003 22:30 . Reden: code fix ]


  • creative8500
  • Registratie: September 2001
  • Laatst online: 03-01 16:54

creative8500

freedom.

Verwijderd schreef op 25 October 2003 @ 16:30:
Zelf werk ik nu ook niet met frames, heb er eerlijk gezegd ook een hekel aan.
Maar zie nu gewoon geen andere oplossing met mijn nieuwe layout idee.
Ik zal eens gaan kijken wat dat CCS e.d. allemaal is.
Ik zou je ook zeker willen aanraden om er naar te gaan kijken, want in principe is CSS het antwoord op elk layoutprobleem. :)
offtopic:
Vind je het erg als ik eerlijk zeg dat ik je site niks vind?

[ Voor 9% gewijzigd door creative8500 op 08-11-2003 16:19 ]


  • Millennyum
  • Registratie: Januari 2001
  • Laatst online: 04-05-2023
Owkee, ik zie al wat je fout doet. Namelijk:

- Mijn frames heten Top en Main. Die van jou heten topFrame en mainFrame. Dat moet je natuurlijk wel aanpassen.
- Je verwijst naar ?index3.html terwijl je moet verwijzen naar de pagina die in de mainframe geladen moet worden, oftewel ?tester.html

Het moet er waarschijnlijk zo uit komen te zien:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<script language="JavaScript">
<!--
 function checkorigin()
 {
 var url = (parent.location.search ? unescape(parent.location.search.substring(1)):'main.html');
 if (url != "main.html")
  {
  window.parent.mainFrame.location.href = "http://www.starbase01.com/" + url;
  }
 }
//-->
</script>

<body OnLoad="return checkorigin()">
en
code:
1
2
3
4
5
6
<script type="text/javascript" language="JavaScript">
<!--
  if (top == self || (parent.frames[1].name != 'topFrame'))
    top.location.href = 'http://www.starbase01.com?tester.html';
//-->
</script>


Zo zou hij moeten werken. Tenminste, als je je index.html vervangt door index3.html. Want je huidige index.html heeft zo te zien geen mainFrame, dus als je zegt dat hij een pagina daarin moet openen, snapt hij het natuurlijk niet ;)
Om het even te testen voordat je je index.html vervangt, kun je waarschijnlijk deze code gebruiken:
code:
1
2
3
4
5
6
<script type="text/javascript" language="JavaScript">
<!--
  if (top == self || (parent.frames[1].name != 'topFrame'))
    top.location.href = 'http://www.starbase01.com/index3.html?tester.html';
//-->
</script>

[ Voor 39% gewijzigd door crisp op 26-10-2003 16:42 . Reden: code fix ]


Verwijderd

Topicstarter
Het werkt! :)

[-edit-]
Mits ik dus de index.html vervang met de nieuwe.
Browser cache. ;)
[/-edit-]

Er is alleen nog 1 iets waar ik tegenaan loop, het url in de startbalk ziet er dan bijvoorbeeld als volgt uit: http://www.starbase01.com/index3.html?tester.html

Zou ik dat nog anders kunnen krijgen?
Bijvoorbeeld alleen http://www.starbase01.com of het path zoals het hoort te zijn, http://www.starbase01.com/tester.html

In ieder geval heel erg bedankt! :)

Nu nog een menu ontwerpen en dan kan ik mijn nieuwe layout online gooien. :)
(moet alleen weer werken deze week, dus 't zal moeten wachten tot volgende week).

[ Voor 10% gewijzigd door Verwijderd op 26-10-2003 16:58 ]


  • Millennyum
  • Registratie: Januari 2001
  • Laatst online: 04-05-2023
Mooi... ik heb er zelf zeker enkele weken over gedaan voordat ik een oplossing voor dit probleem bedacht had... en toen nog enkele weken voordat ik een werkend script had geschreven... :{ Dus ik ben blij dat ik je heb kunnen helpen :)
Er is alleen nog 1 iets waar ik tegenaan loop, het url in de startbalk ziet er dan bijvoorbeeld als volgt uit: http://www.starbase01.com/index3.html?tester.html

Zou ik dat nog anders kunnen krijgen?
Bijvoorbeeld alleen http://www.starbase01.com of het path zoals het hoort te zijn, http://www.starbase01.com/tester.html
Zodra je dat uitgevonden hebt, hoor ik het ook graag ;)

  • slm
  • Registratie: Januari 2003
  • Laatst online: 25-06 12:45

slm

C:
1
2
3
4
5
6
7
8
var tlH, dfg;
if (this.window.name != 'mainFrame') {
 tlH=this.location.href;
 dfg='<frameset rows="294,*" cols="*" framespacing="0" frameborder="NO" border="0">\n'+
 '<frame src="top.html" name="topFrame" scrolling="NO" noresize>\n'+
 '<frame src="'+tlH+'?bonzaiboompjes=lelijk" name="mainFrame">\n</frameset>';
 document.write(dfg);
}


Dit stukje javascript code zou je ergens bovenin je header moeten zetten en heeft als resultaat dat de url 'normaal' blijft.

(waarbij ik nu even jouw frameset in de var heb gezet, dus als je frameset wijzigt, moet je de code ook wijzigen en is het dus beter om de code in een externe .js te zetten)

[ Voor 17% gewijzigd door slm op 27-10-2003 00:21 ]

To study and not think is a waste. To think and not study is dangerous.


  • Millennyum
  • Registratie: Januari 2001
  • Laatst online: 04-05-2023
slm schreef op 27 October 2003 @ 00:20:
C:
1
2
3
4
5
6
7
8
var tlH, dfg;
if (this.window.name != 'mainFrame') {
 tlH=this.location.href;
 dfg='<frameset rows="294,*" cols="*" framespacing="0" frameborder="NO" border="0">n'+
 '<frame src="top.html" name="topFrame" scrolling="NO" noresize>n'+
 '<frame src="'+tlH+'?bonzaiboompjes=lelijk" name="mainFrame">n</frameset>';
 document.write(dfg);
}


Dit stukje javascript code zou je ergens bovenin je header moeten zetten en heeft als resultaat dat de url 'normaal' blijft.

(waarbij ik nu even jouw frameset in de var heb gezet, dus als je frameset wijzigt, moet je de code ook wijzigen en is het dus beter om de code in een externe .js te zetten)
Als mijn Javascript-skillz nog enigszins goed zijn, betekent deze code dat je de index.html helemaal niet meer aanroept, maar je 'm m.b.v. Javascript opnieuw schrijft? En je url blijft dan www.domein.nl/oorspronkelijkaangeroepenpagina.html neem ik aan, dus niet www.domein.nl.

Alleen dat "?bonzaiboompjes=lelijk" begrijp ik niet ;)

Je moet er in dat geval wel aan denken dat je je teller niet op main.html zet, want deze wordt nu niet meer aangeroepen. :)

[ Voor 40% gewijzigd door Millennyum op 27-10-2003 12:10 ]


  • slm
  • Registratie: Januari 2003
  • Laatst online: 25-06 12:45

slm

Millennyum schreef op 27 oktober 2003 @ 11:59:
Als mijn Javascript-skillz nog enigszins goed zijn, betekent deze code dat je de index.html helemaal niet meer aanroept, maar je 'm m.b.v. Javascript opnieuw schrijft? En je url blijft dan www.domein.nl/oorspronkelijkaangeroepenpagina.html neem ik aan, dus niet www.domein.nl.
Klopt. Ik vind het persoonlijk geen probleem als er index.html?page=test.html staat oid, maar werd om gevraagd door de TS
Alleen dat "?bonzaiboompjes=lelijk" begrijp ik niet ;)
Hehe.. Dat is uiteraard pure onzin, maar wel noodzakelijke onzin. Als je niets toevoegt aan de url, gaat het mis in IE en Opera. Je kan natuurlijk ook gewoon ?timestamp=blaat oid toevoegen.
Je moet er in dat geval wel aan denken dat je je teller niet op main.html zet, want deze wordt nu niet meer aangeroepen. :)
Je moet dit bij voorkeur niet in een frame zetten maar in de frames-pagina, alhoewel met nedstat basic dat wat lastiger gaat geloof ik.

To study and not think is a waste. To think and not study is dangerous.


Verwijderd

Topicstarter
Ziet er interessant uit die code!
Heb ik 't goed als je dit in je index.html (die de frames aanroept) neer moet planten?
Ga het zo toch wel even proberen, maar just to be sure vraag ik 't nog maar even. ;)

  • Millennyum
  • Registratie: Januari 2001
  • Laatst online: 04-05-2023
Verwijderd schreef op 27 October 2003 @ 18:57:
Ziet er interessant uit die code!
Heb ik 't goed als je dit in je index.html (die de frames aanroept) neer moet planten?
Ga het zo toch wel even proberen, maar just to be sure vraag ik 't nog maar even. ;)
Nope, deze code moet je in je tester.html zetten. Want hij schrijft de index.html opnieuw voor je! :)

Misschien is het wel een goed idee om even op internet de basics van Javascript te lezen, dan weet je iig wat je ongeveer aan het doen bent...

[ Voor 17% gewijzigd door Millennyum op 27-10-2003 19:57 ]


Verwijderd

Topicstarter
Millennyum schreef op 27 October 2003 @ 19:56:
[...]

Nope, deze code moet je in je tester.html zetten. Want hij schrijft de index.html opnieuw voor je! :)

Misschien is het wel een goed idee om even op internet de basics van Javascript te lezen, dan weet je iig wat je ongeveer aan het doen bent...
Het werkt!! :)
Nu nog een mooi menu bouwen en een hele zooi pagina's aanpassen. :/ :)

Je hebt gelijk dat ik me wat meer moet inlezen in dat hele javascript gebeuren, maar meestal als ik die code een paar keer goed doorlees snap ik wel wat het doet. Ben ook nog bezig op werk met stuff te leren (SQL, JSP, JAVA, Servlets, CSS, etc) het lijkt toch allemaal wel een beetje op elkaar. Maar Javascript hoort er ook nog bij, om 't goed te laten werken enzo.
Maar ik zeg zelf altijd, uit boeken leer je niks, je moet er mee aan de slag gaan en dan de boeken als naslag werk gebruiken, niet die dingen van blz 1 tot 1000 gaan lezen.

  • Millennyum
  • Registratie: Januari 2001
  • Laatst online: 04-05-2023
Verwijderd schreef op 27 oktober 2003 @ 22:19:
[...]
Maar ik zeg zelf altijd, uit boeken leer je niks, je moet er mee aan de slag gaan en dan de boeken als naslag werk gebruiken, niet die dingen van blz 1 tot 1000 gaan lezen.
Dat zei ik ook niet... heb ik zelf ook niet gedaan ;)
Ik kijk gewoon wat ik wil dat het scriptje gaat doen, en dan zoek ik dan wel op wat ik moet weten. Maar dat neemt niet weg dat je wel even de basics moet lezen om het te kunnen begrijpen.
Anyway, ik ben blij dat het werkt en ik ga het zelf binnenkort ook maar eens proberen, dus thnx slm :)

Verwijderd

Topicstarter
Weer een weekendje verder en het menu is er (moeten alleen nog links en on mouse over gifjes komen). Maar nu, ik heb ook al aantal pagina's aangepast.

http://www.starbase01.com/index3.html - De Starbase sluit netjes aan onder het menu, geen groot gat ofzo er tussen.

http://www.starbase01.com/construction.html - De header begint een vrij groot stuk lager waardoor op lagere resoluties er geen text komt te staan, je moet dus ervoor scrollen, en dat wil ik niet.

Nu dacht ik dat dat kwam doordat er teveel lines in de frameset gedefineerd waren, maar dat is dus niet het geval (iig niet dat ik kan zien)

index3.html:
code:
1
2
3
4
5
6
7
8
9
10
11
12
<html>
<head>
<title>Federation Starbase 01 - Starbase01.com</title>
</head>
<frameset rows="130,*" cols="*" framespacing="0" frameborder="NO" border="0">
  <frame src="http://www.starbase01.com/top.html" name="topFrame" scrolling="NO" noresize>
  <frame src="http://www.starbase01.com/main.html" name="mainFrame">
</frameset>
<noframes><body bgcolor="#000000" BGPROPERTIES=FIXED text="#FFFFFF" background="http://www.starbase01.com/images/Space.jpg" link="#FFFF00" vlink="#FF0000" alink="#00FF00">
</body>
</noframes>
</html>


Elke pagina (behalve main.html) roept een js filetje aan zoals hierboven als suggestie is gegeven. (<script language="javascript" src="/frame.js">)


In deze file staat bijna precies hetzelfde:

frame.js
code:
1
2
3
4
5
6
7
8
var tlH, dfg; 
if (this.window.name != 'mainFrame') { 
 tlH=this.location.href; 
 dfg='<frameset rows="130,*" cols="*" framespacing="0" frameborder="NO" border="0">\n'+ 
 '<frame src="http://www.starbase01.com/top.html" name="topFrame" scrolling="NO" noresize>\n'+ 
 '<frame src="'+tlH+'?bonzaiboompjes=lelijk" name="mainFrame">\n</frameset>'; 
 document.write(dfg); 
}


Waardoor komt nu dat gat? In construction.html staat ook geen rare code ofzo waardoor dat zou kunnen komen. Iemand een idee?

-edit- waarom die code nou elke keer f*cked is snap ik geen reet van. :/
Kan een modje dat wellicht even uitleggen??

[ Voor 18% gewijzigd door Verwijderd op 02-11-2003 19:34 ]


  • Dark Blue
  • Registratie: Februari 2001
  • Laatst online: 18-08 18:10

Dark Blue

Compositionista!

Alpenmeisje

Even een klein opmerkinkje (misschien gaat het hierboven er wel over maar dat heb ik niet helemaal gevolgd) het plaatje 'Updates' staat net iets meer naar rechts dan de rest, en ook het paarse randje daarboven sluit niet helemaal aan...

Vertel ik nou oud nieuws? :P

heidiulrich.nl | adventura.nl : rugzakavonturen | pathwise.nl : prepping geeks to get jobs


Verwijderd

Topicstarter
Dark Blue schreef op 02 november 2003 @ 19:37:
Even een klein opmerkinkje (misschien gaat het hierboven er wel over maar dat heb ik niet helemaal gevolgd) het plaatje 'Updates' staat net iets meer naar rechts dan de rest, en ook het paarse randje daarboven sluit niet helemaal aan...

Vertel ik nou oud nieuws? :P
Neuh, heb je gelijk in, moet ik nog bijwerken. Maar dat is voor latere zorg, eerst moet het functioneel werken daarna de layout e.d. pas. :)
Maar toch bedankt voor je oplettendheid!

  • Millennyum
  • Registratie: Januari 2001
  • Laatst online: 04-05-2023
Ik heb nu even geen tijd om je code te bekijken, maar ik kan wel vast je vraag beantwoorden wat betreft het verklooien van de code (kwam ik ook pas dankzij de edits van crisp in deze thread achter....). Je moet je code tussen < nohtml > tags zetten. Dus als je je bericht even edit, kan ik het morgen sneller bekijken ;)

  • Millennyum
  • Registratie: Januari 2001
  • Laatst online: 04-05-2023
Oeps, 2x :P

[ Voor 98% gewijzigd door Millennyum op 02-11-2003 23:13 ]


  • slm
  • Registratie: Januari 2003
  • Laatst online: 25-06 12:45

slm

Wat dacht je van:

script:
<frameset rows="294,*" cols="*" etc>

index3.html:
<frameset rows="130,*" cols="*" etc>

?

Bovendien (alhoewel dit niets met je prob te maken heeft) heb je nu 2 verschillende js functies in je subpages staan:
1. <script language="javascript" src="/frame.js"> die je niet afsluit met </script> (en waarbij je ook geen type="text/javascript" meegeeft).
2. <script type="text/javascript" language="JavaScript">
<!--
if (top == self || (parent.frames[1].name != 'mainFrame'))
top.location.href = 'http://www.starbase01.com/index3.html?construction.html';
//-->
</script>

To study and not think is a waste. To think and not study is dangerous.


Verwijderd

Topicstarter
|:( |:( |:(
Had nog een 2e frame.js file staan.
Eentje in de /index folder (waar hij hoort) maar ook nog eentje in de root.
En je raad het al, die in de root werd aangeroepen in mijn files.
Dus werkte het niet goed. Duh!!! |:( |:( |:(

Goed, ook opgelost. Nu nog het menu perfectioneren.
En mijn code kloppend maken ;)

[ Voor 5% gewijzigd door Verwijderd op 03-11-2003 11:11 ]


Verwijderd

Topicstarter
Mochten er nog mensen geinteresseerd zijn, het is nu helemaal af en 't staat allemaal online.
Thanks voor alle hulp & tips enzo!

Heb toch nog 1 vraagje, weet niet of het gerelateerd is aan het menu & frames verhaal, maar wanneer ik subdomein http://joost.starbase01.com open krijg ik een error te zien in het menu. De Netstat teller wil niet openen, access denied.
Terwijl het ding op alle andere pagina's gewoon opent.
Ligt dit aan Netstat of aan 't script dat gebruikt is?

  • Millennyum
  • Registratie: Januari 2001
  • Laatst online: 04-05-2023
Verwijderd schreef op 08 november 2003 @ 16:09:
Mochten er nog mensen geinteresseerd zijn, het is nu helemaal af en 't staat allemaal online.
Thanks voor alle hulp & tips enzo!

Heb toch nog 1 vraagje, weet niet of het gerelateerd is aan het menu & frames verhaal, maar wanneer ik subdomein http://joost.starbase01.com open krijg ik een error te zien in het menu. De Netstat teller wil niet openen, access denied.
Terwijl het ding op alle andere pagina's gewoon opent.
Ligt dit aan Netstat of aan 't script dat gebruikt is?
Het zou heel goed kunnen dat je nu tegen hetzelfde probleem aanloopt dat ik had. Dat komt door het gebruik van meerdere domeinen. Er zit een beveiliging in de weg, je kunt namelijk niet door middel van javascriptjes gegevens uit pagina's die op een ander domein staan achterhalen.

Verwijderd

Topicstarter
Hmm... denk dat je daar gelijk in hebt.
Want http://www.starbase01.com/joost werkt namelijk wel direct met tellertje.
En http://joost.starbase01.com niet. (Het verwijst wel allebei naar dezelfde map).
Wat ik natuurlijk zou kunnen doen is een index.html maken voor http://joost.starbase01.com en deze laten verwijzen naar http://www.starbase01.com/joost dan omzeil je het een beetje, al ben je dan wel het effect van een subdomein kwijt. :/
Pagina: 1