• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

frameübergreifende Variable

Status
Für weitere Antworten geschlossen.

D4Fish

Neues Mitglied
wie kann ich eine frame uebergreifende variable declarieren und abfragen? also ich moechte die variable in einer datei bestimmen und in der anderen abfragen ....

vielen dank im vorhinein..
 
das wird wohl eher nicht machbar sein, da ja ein frame eine ganze seite für sich ist.

aber mit einem kleinen trick sollte es möglich sein (hab ich nie ausprobiert, klappt aber vielleicht):

du machst neinen dritten frame auf, der 1 px groß ist (geht das auch mit 0?? wenn ja dann geht das auch so). in dem frame ist lediglich ein input-feld (oder mehrere) und in deises feld kannste deine variablen reinschreiben. wenn du nun den einen frame änderst, dann bleibt der 3. so wie er schon immer war, und die variable ist darin geespeichert, und im geänderten frame kann man die abfragen.

ist aber wi gesagt noch nie von mir gestestet worden, lediglich theorie :D ich hab mal ein schaubild bei selfhtml gesehen, das zeigt wie man auf andere frames zugreif, wenn man selber in einem ist, das ist aber schon ne lange zeit her...
 
die variable per URL weitergeben, als beispiel und dann auslesen:

PHP:
//auf der anfangsseite
$sitevar = 'wert';
echo '<a href="site.file?sitevar=wert"></a>';

PHP:
//auf der endseite
/* jetzt scripte oder ähnliches */

$uebergebene_var = $_GET['sitevar'];
echo $uebergebene_var;

//mit der superglobalen $_GET wird der wert aus der URL geholt und steht zur verfügung

echo 'die variable muss nicht ausgegeben werden, man kann auch so mit ihr weiterarbeiten';

das ist jetzt eine php-lösung, aber irgendwie sollte das auch mit js gehen (nur davon hab' ich absolut keinen plan).

Nils aka XraYSoLo
 
Zuletzt bearbeitet:
Normalerweise gibt man die Links in Framesets ja mit target="framename" an. Man könnte auch auf die Framesetseite direkt verweisen (index.php) wo dann die Variablen ausgewertet werden. Das Frameset wird normal eingebunden, allerdings werden die Frames so angezeigt:
HTML:
<frame src="home.php?variable=inhalt_der_variable" name="home">
Dann.. So wie's XraYSoLo gezeigt hat.
 
Zuletzt bearbeitet von einem Moderator:
vielen dank fuer die schnelle und umfangreiche hilfe! hat mir sehr weitergeholfen ;)

werde mich heute abend/nacht noch weiter damit beschaeftigen.....

@hobbyuser: vorm frameset ist zwar ne gute idee, das problem ist nur, dass ich die variable in einem frame, sprich in einer eigenen datei, declariere, und sie dann in einer anderen datei wieder auslesen moechte .... vor frameset waere vll auch moegl, aber dann wird das wieder ein riesen script mit 9abfragen .... ist zwar nicht unmoeglich, aber halt nicht das einfachste/kuerzeste ;) .... trotzdem vielen dank :D
 
D4Fish schrieb:
vielen dank fuer die schnelle und umfangreiche hilfe! hat mir sehr weitergeholfen ;)

werde mich heute abend/nacht noch weiter damit beschaeftigen.....

@hobbyuser: vorm frameset ist zwar ne gute idee, das problem ist nur, dass ich die variable in einem frame, sprich in einer eigenen datei, declariere, und sie dann in einer anderen datei wieder auslesen moechte .... vor frameset waere vll auch moegl, aber dann wird das wieder ein riesen script mit 9abfragen .... ist zwar nicht unmoeglich, aber halt nicht das einfachste/kuerzeste ;) .... trotzdem vielen dank :D


wieso sollte das ein problem sein? du musst die variable ja nicht direkt mit einem wert belegen, du kannst auch einfach

var text = "";

oder bei zahlen

var zahl;

schreiben. die variablen sind dann vorher deklariert, aber noch nicht mit etwas belegt. und was meinst du mit 9 abfragen :confused:
 
D4Fish schrieb:
@hobbyuser: vorm frameset ist zwar ne gute idee, das problem ist nur, dass ich die variable in einem frame, sprich in einer eigenen datei, declariere, und sie dann in einer anderen datei wieder auslesen moechte .... vor frameset waere vll auch moegl, aber dann wird das wieder ein riesen script mit 9abfragen ....
Also das verstehe ich nicht D4Fish.

Es ist doch im Prinzip egal ob du die Variable in einem Frame erst deklarierst oder ihr nur noch den Wert zu weist. Der Name der Variablen steht doch eh schon vorher fest. :roll:

Ich frage mich ob du die verlinkte Seite gelesen hast oder ich irgendetwas dort falsch verstanden habe. :confused:
 
kann sein dass ichs falsch verstanden hab^^ .... also mein problem nommal im klar text^^ .... ich moechte in das "Kopfframe" eine 2. Ueberschrift setzen, die (logischerweise :)) abhaengig vom "Hauptframe" geaendert wird. Also, bei "home" soll die ueberschriff im kopfframe "herzlich willkommen ... blabla" heißen bei "aktuelles" soll die ueberschriff im kopfframe "aktuelles" heißen .... also habe ich einfach im "hauptframe" die variable ueberschrift entsprechen definiert ... zB:

Code:
<script type="text/javascript">
var ueberschrift = "Herzlich Willkommen auf ......"
</script>


im kopfframe steht dann:
Code:
<script type="text/javascript">
document.write(ueberschrift)
</script>

allerdings war diese variable, wie ich schnell merkte^^, nur fuer das hauptframe definiert ..... im kopfframe war sie ganz einfach undefiniert .... daher die frage nach einer frameuebergreifenden variable


wenn ich deinen link richtig verstanden hab, muss ich in die index.html vor <frameset...> die variable definieren .... wenn ich das aber so machen wuerde, haette ich ja fuer jeden link eine if abfrage. also if {main == "home.html"} {var ueberschrift = "xyz"}

(bitte falschen klammern und andere fehler in der zeile ignorieren, sollte nur der erklaerung dienen ;D)

entweder ich verstehe dich total falsch oder es ist mehr arbeit als meine erste idee .... aber ich denke solangsam, dass es die einfachste ist :D
 
D4Fish schrieb:
kann sein dass ichs falsch verstanden hab^^ .... also mein problem nommal im klar text^^ .... ich moechte in das "Kopfframe" eine 2. Ueberschrift setzen, die (logischerweise :)) abhaengig vom "Hauptframe" geaendert wird. Also, bei "home" soll die ueberschriff im kopfframe "herzlich willkommen ... blabla" heißen bei "aktuelles" soll die ueberschriff im kopfframe "aktuelles" heißen .... also habe ich einfach im "hauptframe" die variable ueberschrift entsprechen definiert ... zB:
Aber genau das wird auf der Seite beschrieben.

Also du hast 3 Dateien:
1. index.htm (Enthält die Framesetdefinition)
2. haupt.htm (Setzt die Überschrift)
3. kopf.htm (Zeigt die Überschrift an)

Dann musst du in index.htm die Variable indexieren.
HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<html>
<head>
<title>SEITENTITEL</title>

<script language="JavaScript" type="text/javascript">
 <!--
  var titel_2;
 //-->
</script>
</head>

<frameset rows="80%,*">
 <frame name="frame1" src="haupt.htm">
 <frame name="frame2" src="kopf.htm">
</frameset>

Danach wird die Variable in haupt.htm ganz normal gesetzt wie du sie sonst auch setzen würdest, nur mit entsprechender Syntax.
HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<html>
<head>
<title>SEITENTITEL</title>

<script language="JavaScript" type="text/javascript">
 <!--
  parent.titel_2 = "Die zugehörige Überschrift";
 //-->
</script>
</head>
Zu guter letzt wird diese Variable dann in der Seite kopf.htm wieder ausgegeben.
HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<html>
<head>
<title>SEITENTITEL</title>
</head>

<body>
<p>
Die Überschrift lautet: <script>document.write(parent.titel_2)</script>
</p>
</body>
</html>

Das sollte genau das sein was du brauchst. :roll:
Ich muss allerdings dazu sagen, dass ich dieses Beispiel aus der oben verlinkten selfhtml Seite herausgearbeitet habe. Denn meine eigenen JavaScript-Kenntnisse reichen für so etwas nicht aus, da ich JavaScript auf meinen Seiten vermeide. Hat ein User es nämlich deaktiviert, sieht er keine zweite Überschrift. :p
 
du könntest das auch recht einfach mit einer switch-case abfrage anstatt tausend if-abfragen machen, oder einfach bei jedem lin ein onclick einbauen, dass eine funktion aufruft, in der der entsprechende titel geladen wird. dabei speicherst du am besten alle titel in einem array:

Code:
var titel = new Array();
titel[0] = "hallo ...";
titel[1] = "jetzt bist du...";
titel[2] = "herzlich willkommen im bereich...";

hier bei habe ich des übersichtlichkeit halber nicht alles ine eine zeile geschrieben. die funktion muss nur so aussehen:

Code:
function wechsel(zahl){
document.getElementById('uberschrift').firstChild.nodeValue = titel[zahl];
}
ich hab diesmal statt document.write etwas andere genommen, weil ich persönlich document.write nicht so toll finde. hierbei musst du lediglich einem h1-tag die id "uberschrift" geben, und die aktuelle überschrift wird genommen.
und beim aufrufen der funktion schreibst du die indexnummer der überschrift in die funktion:

Code:
<a href="link.html" onClick="parent.frames[0].wechsel(2)">links</a>

bis auf den aufruf der funktion kommt alles in die datei vom oberen frame rein.

ich hab das ganze zwar jetzt nciht mehr um diese zeit getestet, aber das sollte klappen. und wenn nicht, dann versuch den fehler zu beheben, oder poste hier nochmal ;)
 
@ hobbyuser: wow :D .... perfekt und vollstaendig^^ ... da macht jemand meine arbeit :D danke vielmals .....
vll lass ich mir fuer die leute dies aus haben auch mal noch was einfallen ... aber vorerst muessen sie halt ohne 2. ueberschrift leben :D ....

@commodore: auch dir vielen dank^^ ... die lsg ist schoen kurz :D ... ich ueberleg mir noch bzw prbier aus, welche mir besser gefaellt ;) (Allerdings kann ich dir nur tw folgen :D .... ich habe ne index datei, in der die 3 frames(menu/kopf/main) angeordnet sind und ein menue mit 9auswahlmoegl. fuers "main"-frame ..... was von dem was du da ausgekluegelt hast, muss hetzt wo rein^^ ... das erste wuerde ich jetzt intuitiv in die index.html stecken ... und den rest? ... eins zum auslesen, ich nehme an das 2., muss wohl in den "kopf" ... aber ich verstehs eben nur tw^^ .... waer super nett wenn du das noch etwas genauer erklaeren koentest^^ ... thx schonmal ... und gn8 ....mich hauts gleich um.....)



Ich werd hier ja richtig mit antworten bombadiert :D .... find ich klasse ... an alle ein riesiges dankeschoen^^ ... so macht lernen spaß ;)

nochmals vielen dank fuer die arbeiten
icon14.gif
 
Zuletzt bearbeitet:
D4Fish schrieb:
@ hobbyuser: wow :D .... perfekt und vollstaendig^^ ... da macht jemand meine arbeit :D danke vielmals .....
vll lass ich mir fuer die leute dies aus haben auch mal noch was einfallen ... aber vorerst muessen sie halt ohne 2. ueberschrift leben :D ....
Erstmal Danke für das Lob. :D

Was du dir für Leute ohne JavaScript einfallen lassen könntest wäre eine serverseitige Lösung. Hierzu verwendet man am besten PHP und statt der Frames nimmt man Divs. So gestaltet man moderne barrierefreie Webseiten. ;)
 
Kann man das script nicht einfach in einer externen Datei auslagern?
dass du dann halt in den Frames auf die Datei zugreifst?
ich meine das mit

//Wo sind den Hier die BB code Buttons???

Code:
<script type="text/css" src="../script.js">
 
mit einer externen datei sollte es nicht unbedingt besser gehen, da du ja nicht in dem unteren frame auf die variablen im oberen zugreifen kannst, nur weil die atei extern ist.

und zu deiner frage: da musst du bei den einstellungen im kontrollzentrum ganz unten was umstellen - vom normalen editor zum editor mit zusätzlichen schaltflächen.
 
@hobbyuser: habe deine loesung mal eingebastelt :D .... es funktioniert an sich hervorragend^^ .... ABER (wie koennte es anders sein :D) die variable im "kopf"frame wird ja nur abgefragt, wenn der kopf aktualisiert wird ... (eig. logisch^^ aber hier verhaengnisvoll -.-) --> das Problem: das kopfframe wird ja eig nur einmal geladen und dann nichtmehr aktualisiert --> die ueberschrift aendert sich nicht :( ..... kann man da vll ne mit java ne schleife einbauen?

idee:
Code:
schleifenanfang
<script language="JavaScript" type="text/javascript">
 <!--
  document.write(titel_2)
 //-->
</script>
pausefuer ein oder zwei sec
Schleifenende

(tut mir leid das ich das als "Code" schimpfe^^)
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben