Zur Navigation

Globale Variablen in JavaScript - Austausch zw. HTML-Dateien

1 lava

Hallo, ich möchte, daß eine HTML-Datei über ein JavaScript mittels window.open ein Zweitfenster öffnet, in dem eine zweite HTML-Datei mit immer derselben Grundstruktur, aber einem wechselnden Foto (variablenabhängig, d.h. eigentlich müßte die eine HTML-Datei der anderen eine Zahl übergeben --- soweit ich weiß, geht das nicht direkt und ich hab es mit einer separaten .js-Datei versucht, auf die beide HTML-Dateien zugreifen --- allerdings ist die globale Variable wohl nicht wirklich global, sondern erlischt wohl beim Aufruf der 2. HTML-Datei und die weiß dann eben doch nicht, welches Pic via onLoad=javafunction() geladen werden soll....) Hat jemand einen Rat für mich? Lava

03.10.2006 23:33

2 Jörg Kruse

Hallo Lava,

eigentlich müßte die eine HTML-Datei der anderen eine Zahl übergeben --- soweit ich weiß, geht das nicht direkt

du kannst die Zahl im Query String übergeben, z.B. hier als Variable a:

window.open("popup.html?a=" + a, "Popup");

Im Zweitfenster kannst du auf den Query String über das Objekt search zugreifen und mithilfe von substr() die Variable wieder extrahieren:

a = window.location.search;
a = a.substr(3);

04.10.2006 00:03 | geändert: 04.10.2006 00:04

3 lava

Hm, danke für den Tip. QueryStrings kannte ich noch gar nicht. Von der Struktur her bräuchte ich dann ungefähr sowas:

function showpic()
{showfenster=window.open("bilderrahmen.html?a=" + 7, "Bildname"); showfenster.focus(); width= ; height= ;}

und bilderrahmen.html sollte gleich beim Aufruf ein entsprechendes onLoad machen können, also

<body bgcolor=black onLoad=dias(a)>

aber dann weiß ich nicht, wohin mit der window.location.search - Zeile und der a.substr(3) - wieso eigentlich 3 ?



Kannst du mir das noch genauer beantworten?

Ich würde gern zum einen wissen, wie ich mein Problem gemäß meiner hier vorgestellten Idee löse. Andererseits kann es sein, daß es auch noch eine elegantere Methode gibt. Die würde ich dann zusätzlich am liebsten gern wissen. (Ein Freund sagte mir, es gäbe in PHP elegantere Methoden, aber da ich nur UMTS habe und beim Seitenschreiben nicht kontinuierlich online bin, hilft mir das erstmal wenig.) Also, ich will eine Fotogalerie machen, wo eine Tabelle diverse Anklickpics in genormter Größe (entweder nach Breite oder Länge angepaßt) zeigt und dann beim Anklicken auf die Pics neue Fenster geöffnet werden, die das Pic in Originalgröße (unterschiedl. Größen) zeigen - jeweils schwarz umrandet und mit einem "Schließen"-Button anbei. Momentan macht bilderrahmen.html einfach eine HTML-Datei mit schwarzem Background und schließen-Button und dem ausgewählten Bild auf, die dann durch die Funktion showpic in einem neuen Fenster mit festeingestellter Größe geöffnet wird...... Ich schreibe also zu jedem Pic eine eigene showpic - Funktion mit individuellen Maßen, aber ich wollte nicht auch zu jedem Pic nochmal die bilderrahmen-Datei in HTML abspeichern..... Bin dankbar für Tips - sowohl für die allgemeine Lösung zum Problem als auch für meinen konkreten Lösungsansatz!!!! Lava

12.10.2006 21:34

4 lava

Super, ich hab die Teillösung für das selbstgestellte Problem nun folgendermaßen hinbekommen:

function showpic()
{showfenster=window.open("bilderrahmen.html?a="+1, "BilderName1", height= , width= );showfenster.focus();}

und in bilderrahmen.html dann

<body bgcolor=black onLoad=dias(window.location.search)>

und in der Funktion

function dias(X)
{Y=X.substr(3);
window.document.images[0].src=diaArray[Y] }


Jetzt müßte ich das ganze nur noch soweit modifizieren, daß die bilderbreiten und längen direkt erkannt werden und auch die Höhen und Weiten der showfenster automatisch berechnet werden können

(ebenso wie bei den Anklickpics auch automatisch festgestellt werden müßte, ob die Originale eher lang oder eher hoch sind und ob man folglich die Länge oder die Höhe auf die vorgegebenen Maße zwingen will....)

Kann javascript sowas????

12.10.2006 21:51

5 Jörg Kruse

a.substr(3) - wieso eigentlich 3 ?

Der Search String lautet ja z.B. "?a=1" - substr(3) entfernt die ersten drei Zeichen, übrig bleibt der Wert "1".

Jetzt müßte ich das ganze nur noch soweit modifizieren, daß die bilderbreiten und längen direkt erkannt werden

Du könntest Breite, Höhe und a im Search String durch Komma getrennt in einem gemeinsamen Parameter übergeben:

function showpic(a, width, height)
{
showfenster = window.open("bilderrahmen.html?a=" + a + "," + width + "," + height, "BilderName1", "height=" + height + ", width=" + width);
showfenster.focus();
}

<body onload="showpic(1, 80, 100);">

Der Search String sieht dann z.B. so aus: "?a=1,80,100"

a.substr(3) ergibt "1,80,100" - diesen String kannst du mithilfe von split(",") in ein Array mit den drei Werten auftrennen

Ein Freund sagte mir, es gäbe in PHP elegantere Methoden

Mit PHP könnte man direkter auf die Parameter zugreifen, z.B. bei einem Search String "?a=1&width=80&height=100":

<?php
$a = $_GET['a'];
$width = $_GET['width'];
$height = $_GET['height'];
?>

ebenso wie bei den Anklickpics auch automatisch festgestellt werden müßte, ob die Originale eher lang oder eher hoch sind

Nachdem du die Variablen aus dem Search String extrahiert hast, kannst du die Breite und die Höhe ja miteinander vergleichen

if (width > height) {

} else {

}

12.10.2006 22:43 | geändert: 12.10.2006 22:47

6 lava

Superherzlichen Dank für die rasche Antwort. Im Moment ermittle ich width und height noch per Hand, d.h. ich probiere aus, welche Größen zu den Fotos gut aussehen. Sinnvoll wäre aber, wenn javascript die Fotolänge und -breite automatisch erkennen könnte und ich dann einfach Breite und Höhe des Bilderrahmens entsprechend errechnen könnte, also z.b.

a = breite (bild) // wobei bild dann sowas wie dia[7] wäre

bildrahmenbreite = a * 1,2 // also 20% mehr

Gibt es so eine Breiten/Höhen-Erkennfunktion in JavaScript???

----

Soweit ich das jetzt alles fertighabe, steht es vorläufig unter http://people.freenet.de/bdsm-fantasies/ladylava
Dort bei den Fotos. Allerdings hat es offline unter Linux mit Netscape gut funktioniert und nach dem Upload klappt es unter Windows mit IE nicht richtig. Ich nehme an, die showfenster.focus() Sachen funktionieren da irgendwie anders.... jedenfalls behält das geöffnete Fenster seinen Focus manchmal nicht bei und verschwindet unerwünschterweise hinter dem Hauptfenster.... und auch die Größenanpassung, die offline unter Linux nun problemlos funktioniert hat, klappt online unter Windows noch nicht...da scheint immer nur die zuerst geöffnete Fensterbreite/höhe maßgebend von allen späteren Fenstern übernommen zu werden (obwohl ich schon extra die showfenster auch durchnumeriert habe, damit Windows weiß, daß es jedes Mal ein neues Fenster aufmachen soll....) Aber gut, jetzt geh ich erstmal schlafen und kümmere mich erst frühestens morgen weiter drum..... Immerhin bin ich heute ein paar Schrittchen weiter gekommen: DANKE!




12.10.2006 23:35

7 Jörg Kruse

Du kannst Höhe und Breite aus dem Objekt images ermitteln

imageheight = document.images[0].width;
imagewidth = document.images[0].height;

... wobei images[0] das erste Bild auf der Seite ist

dann einfach Breite und Höhe des Bilderrahmens entsprechend errechnen

Ja kannst du so machen - nur die Dezimalzahlen beinhalten in JavaScript einen Punkt, kein Komma:

bildrahmenbreite = a * 1.2  // also 20% mehr

die Größenanpassung [...] klappt online unter Windows noch nicht...da scheint immer nur die zuerst geöffnete Fensterbreite/höhe maßgebend von allen späteren Fenstern übernommen zu werden

Ist bei mir im IE 6 und IE 7 nicht der Fall

13.10.2006 00:24 | geändert: 13.10.2006 00:25

8 lava

Seltsam, bei mir auf der Arbeit geht es mit dem IE auch einigermaßen (korrekt nur dann, wenn man die Fenster auch wirklich schließt - sonst wird die ursprüngliche Fenstergröße beibehalten; da muß ich also irgendwo noch ein close() einbauen; zumindest verschwinden die Pics aber auf der Arbeit nicht von selbst in den Hintergrund, was sie bei mir daheim leider noch tun....)

Mit den verschiedenen Ebenen von windows (wann Namen eingeben, wann einfach windows) und document (windows.document kommt mir immer so doppeltgemoppelt vor) blick ich auch noch nicht ganz durch, aber falls mir hier jetzt nicht jemand schnell eine Crash-Erklärung geben kann, muß ich mir wohl das entsprechende Kapitel im Handbuch nochmal durchlesen. Bisher war es eher ein trial-and-error als systematisches Vorgehen (wenn es mit windows. oder mit document. nicht funktioniert, dann mal windows.document versuchen etc.)

Danke übrigens für die eifrigen Antworten!

16.10.2006 22:06

9 lava

Also, ich hab's nochmal auch unter Linux ausprobiert: auch da funktioniert es NUR korrekt, wenn ich die Showfenster a) durchnumeriere, also jedem einen eigenen Namen gebe und trotzdem b) auch immer wieder das eine schließe, bevor ich das nächste durch Bildklick öffne

Was hab ich falsch gemacht?

16.10.2006 22:58

10 Jörg Kruse

Die Fenster sollten auch alle unterschiedliche Namen erhalten - in den Funktionen auf beides.js wird jedesmal der Name "ZoomNameLs8" vergeben. Wenn es bereits ein Fenster mit diesem Namen gibt, wird der Inhalt wohl dort hineingeladen, ohne dass die Eigenschaften des Fensters geändert werden

windows.document kommt mir immer so doppeltgemoppelt vor

Ja, das ist es auch, da document ein Unterobjekt von window (ohne -s am Ende) ist - es sollte von daher eigentlich keinen Unterschied machen, nur document zu notieren.

17.10.2006 08:56