Archivlink: javarea.de Forum > JavaScript > Frameset nachladen schön und gut, aber...
Vollständigen Link anzeigen: javarea.de Forum > JavaScript > Frameset nachladen schön und gut, aber...

Pages: [1]

geschrieben von Kristo Novo am 04.01.2007 - 12:01
...bei allen Skripts zum Thema "Frameset nachladen" die ich bisher gefunden habe,
hat man keine Möglichkeit, unterschiedliche Html-Dateien in unterschiedlichen Frames nachzuladen.

Hallo zusammen
ich benutze folgendes Skript um mein Frameset nachzuladen falls ein Nutzer
auf eine Einzelseite stößt:
http://aktuell.de.selfhtml.org/arti....yn-frames/

Mein Frameset besteht aus vier Frames.
Darin enthalten
in Frame_01 (=Name des Frames) die Datei frame_01.htm
in Frame_02 (=Name des Frames) die Datei frame_02.htm
in Frame_03 (=Name des Frames) die Datei frame_03.htm
in Frame_04 (=Name des Frames) die Datei frame_04.htm

Anhand folgender Zeile des Skripts in der Frameset-Datei kann man
immer nur ein Frame als den "Nachladeframe" bestimmen (xyzHauptframe).
HTML-Quelltext
1: 
frames.xyzHauptframe.location.href=Adressanhang.substring(1,Adressanhang.length);


d.h. stoßt der Nutzer auf frame_01.htm als Einzelseite wird das Frameset
nachgeladen und die Datei frame_01.htm wird in xyzHauptframe eingefügt.
Allerdings wird auch frame_02.htm in diesen Frame geladen sollte diese
als Einzelseite aufgerufen werden.
Dasselbe gilt dann bei dem Skript auch für frame_03.htm und frame_04.htm

Wie schaffe ich es also, dass die Datei frame_01.htm bei Aufruf ohne Frameset
dieses nachlädt und im Frame Frame_01 eingefügt wird aber ebenso bei Aufruf
der Datei frame_02.htm diese beim nachladen des Framesets in Frame_02
eingefügt wird (usw.)?

geschrieben von Kristo Novo am 04.01.2007 - 17:48
ich habe da eine Lösung:

Skript im Frameset
HTML-Quelltext
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 
14: 
<SCRIPT language="JavaScript">
<!--

 function checkFramecall() {
 var Adressanhang=location.search;
 if(Adressanhang)
 var Nummer = location.search.substring(1, 2);
 frames[Nummer].location.href=Adressanhang.substring(2,Adressanhang.length);
 }

//-->
</SCRIPT>

<frameset onLoad="checkFramecall()">



Skript in den Frameseiten
HTML-Quelltext
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
</style>
<SCRIPT language="JavaScript">
  <!--
  function checkFrameset() {
  if(!parent.frame_01)
  location.href="frameset.htm?" +0 + location.pathname;
  }
  //-->
</SCRIPT>

<body onLoad='checkFrameset()'>



Aber was tun bei einer Frameanzahl von über 10?
Durch die zweistellige Zahl wird die substring() Zeichenzuordnung ja ungültig.
Also was kann man noch tun um die Framenummer (frames[#]) von Html-Datei
nach Frameset zu übergeben???

geschrieben von Micha am 04.01.2007 - 19:22
Hallo,

ich weiß nicht, wie es andere sehen, aber Frames stellen heute kaum noch eine Bedeutung dar - sie sind nicht mehr Zeitgemäß. Eines der großen Probleme dieser Technik hast Du gerade selbst vorliegen und versuchst mit JavaScript dran rumzudoktern. Es gibt weitere erhebliche Einschrängungen für den User, wenn dieser auf eine Seite mit Frames trifft. Die einzige mir bekannte Seite, wo Frames wirklich sinnvoll sind, ist die Bildersuche von google.

Meines erachtens nach solltest Du lieber nach einer Alternative zu Deinen Framesets suchen. SSI könnte das zB sein.

Ansonsten solltest Du die URI anders zusammen bauen:

statt:
HTML-Quelltext
1: 
location.href="frameset.htm?" +0 + location.pathname;


lieber:
HTML-Quelltext
1: 
location.href="frameset.htm?" +0 +" & "+ location.pathname;


und dann mit split("&") ein Array erzeugen. Die erste Zelle ist die Nummer die zweite die URI

Micha

geschrieben von René am 04.01.2007 - 19:29
HTML-Quelltext
1: 
location.href = 'frameset.htm?' + '0' + '|' + location.pathname;


dann mit split(); den String trennen, dann hast du ein Array.

HTML-Quelltext
1: 
2: 
3: 
4: 
5: 
var seite = location.search.substr(1);
var arr = seite.split('|');

alert(arr[0]);
alert(arr[1]);

geschrieben von Micha am 04.01.2007 - 19:33
Hi,

gleiche Idee gehabt Aber in einer Adresse sollte man doch lieber das &-Zeichen nehmen oder?

index.html?12&foo.html

als index.html?12|foo.html

Micha

geschrieben von René am 04.01.2007 - 19:35
... ??? weil & ja das $_GET[] trennt ???

geschrieben von Micha am 04.01.2007 - 19:45
Hallo,

weil & das in einer URI vorgesehene Trennzeichen für Parameter ist?! mit GET hat das hier nichts zu tun.

Micha

geschrieben von Kristo Novo am 04.01.2007 - 21:26
Dank´ euch für die Antwort.
Jetzt funktioniert alles so wie ich es mir vorgestellt habe

Vielleicht könnt ihr nochmal ein Blick drüber werfen
ob alles "sauber" geschrieben ist


Skript im Frameset
HTML-Quelltext
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
<SCRIPT language="JavaScript">
<!--
 function checkFramecall() {
 var seite = location.search.substr(1);
 var arr = seite.split('&');
 if(seite)
 frames[arr[0]].location.href=arr[1];
 }
//-->
</SCRIPT>

<frameset onLoad="checkFramecall()">


Skript in den Frameseiten
HTML-Quelltext
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
<SCRIPT language="JavaScript">
  <!--
  function checkFrameset() {
  if(!parent.frame_12)
  location.href="frameset.htm?" +12 +"&" +location.pathname;
  }
  //-->
</SCRIPT>

<body onLoad='checkFrameset()'>

geschrieben von Micha am 04.01.2007 - 22:15
Hi,

zwei kleinerse Sachen sind mir aufgefallen.

1. statt:
HTML-Quelltext
1: 
<SCRIPT language="JavaScript">
schreibst Du Richtigerweise:
HTML-Quelltext
1: 
<script type="text/javascript">


und 2. die if-Bedingung sollte an den Anfang:
HTML-Quelltext
1: 
2: 
3: 
4: 
5: 
6: 
function checkFramecall() {
 var seite = location.search.substr(1);
 var arr = seite.split('&');
 if(seite)
 frames[arr[0]].location.href=arr[1];
 }


wird demnach zu
HTML-Quelltext
1: 
2: 
3: 
4: 
5: 
6: 
7: 
function checkFramecall() {
  var seite = location.search.substr(1);
  if(seite) {
    var arr = seite.split('&');
    frames[arr[0]].location.href=arr[1];
  }
}


vll sieht ja René noch was aber ich denke das sollte es sein.

Micha

geschrieben von Kristo Novo am 05.01.2007 - 01:47
Danke Dir


Powered by: JBB v.2.0.4 Copyright ©2000-2006, www.javarea.de.