Netscape 4.x kennt Werte der Variablen nicht mehr
sunny
- javascript
Hallo liebes Forum,
habe mal wieder ein Problem mit Netscape 4. Bei der Suche im Archiv hab ich zwar einiges zum Thema bzw. zu ähnlichen Problemen gefunden, aber mein Problem konnte ich leider trotzdem nicht lösen.
Und zwar ist es so dass ich eine externe JavaScript-Datei einbinde, allerdings einige Variablen nicht in dieser Datei selbst deklariere sondern im Body meines HTML-Dokuments.
Das sieht so aus:
Und da erkennt jetzt Netscape im externen JavaScript die Variable MeineVariable nicht mehr - sie sollte eigentlich den Wert 1 haben.
Ich benötige ich sie an der Stelle im JS:
if (document.layers) {
document.MeinDiv.document.open();
document.MeinDiv.document.write('Irgendetwas' + MeineVariable + 'Nochirgendetwas');
document.MeinDiv.document.close();
}
Da sagt der NN er erkennt die Variable nicht (is not defined).
Erst dachte ich dass die Variable vielleicht durch das document.open(); verloren geht, allerdings steht sie mir in meinem externen JavaScript auch vorher nicht zur Verfügung.
Eine zusätzliche Funktion zur Variablenübergabe zu bauen funktioniert auch nicht, da ich die Variable nämlich global benötige. Und sie in die andere Funktion zu packen würde das Script schon ziemlich kompliziert machen, das möchte ich eigentlich nicht. Es sollte ja so variabel wie möglich sein, daher hätte ich einfach diese global benötigten Vars im Body des HTML-Docs erst geschrieben. Damit ich das Script mit jeweils unterschiedlichen Vars an unterschiedlichen Stellen im HTML aufrufen kann ...
Hat jemand eine Idee was ich machen kann damit auch NN meine Variablen erkennt und im Script verarbeiten kann?
PS: Wenn ich die Variablen im externen JS mit einem fixen Wert deklariere dann läuft das Script einwandfrei.
Hoffe irgendjemand hat sich da jetzt überhaupt noch durchgewühlt und kann mir weiterhelfen ...
Liebe Grüße,
sunny
Hallo,
PS: Wenn ich die Variablen im externen JS mit einem fixen Wert deklariere dann läuft das Script einwandfrei.
Versuche es mit der Variablendefinition im HEAD. Dort ist der geeignetere Ort fuer globale Variablen als im BODY.
MfG, Thomas
Hallo Thomas!
Danke für die schnelle Antwort!
Versuche es mit der Variablendefinition im HEAD. Dort ist der geeignetere Ort fuer globale Variablen als im BODY.
Du hast recht - wenn ich die Vars im Head bereits deklariere erhalte ich zumindest keinen JS-Fehler mehr.
Das Problem allerdings:
Die Funktion aus dem externen JS wird in meinem Body mehrmals aufgerufen, jeweils mit unterschiedlichen Variablenwerten - daher die Deklaration erst im Body ...
Das geht also leider nicht.
Lg,
sunny
Hallo,
Du hast recht - wenn ich die Vars im Head bereits deklariere erhalte ich zumindest keinen JS-Fehler mehr.
Das Problem allerdings:
Die Funktion aus dem externen JS wird in meinem Body mehrmals aufgerufen, jeweils mit unterschiedlichen Variablenwerten - daher die Deklaration erst im Body ...
Dann mache die Variable dennoch global: Definiere sie im HEAD ohne Wertzuweisung (oder mit einem Initialwert) und weise die konkreten Werte dann im BODY vor den Funktionsaufrufen zu.
MfG, Thomas
Hi!
Die Funktion aus dem externen JS wird in meinem Body mehrmals aufgerufen, jeweils mit unterschiedlichen Variablenwerten - daher die Deklaration erst im Body ...
Dann mache die Variable dennoch global: Definiere sie im HEAD ohne Wertzuweisung (oder mit einem Initialwert) und weise die konkreten Werte dann im BODY vor den Funktionsaufrufen zu.
Dann wird entweder _immer_ der Initialwert angewandt - oder die Variablen bleiben leer - die neue Zuweisung im Body wird einfach ignoriert im NN :-(
Grüße,
sunny
Hallo nochmal,
jetzt ist mir noch ein komischer Effekt (im NN 4.x) aufgefallen ...
wenn meine Datei so aussieht ...
... wird die zweite Funktion "korrekt" ausgeführt und zwar mit den Werten die vor dem ersten Funktionsaufruf (MeineVariable = 1) zugewiesen werden ... kann es sein dass die Variablen einfach nur nicht "so schnell" zur Verfügung stehen? Oder wie gibt es das jetzt? Jetzt versteh ich noch weniger ... !?
Grüße,
sunny
Hallo,
mir scheint dass du für Netscape 4 die möglichen Abhängigkeiten vom Ablauf des Seitenaufbaus nicht berücksichtigst, was sich dann auf verschiedene Netscape 4 Versionen auch noch unterschiedlich auswirken kann.
Hast du mal eine URI oder ein kompaktes, aber vollständiges Codebeispiel?
Grüsse
Cyx23
hi Cyx23,
Hast du mal eine URI oder ein kompaktes, aber vollständiges Codebeispiel?
Ich hab mal eben eine Beispielseite gebastelt - die relevanten Teile sollten vorkommen.
http://www33.brinkster.com/enomis/testdatei
Liebe Grüße,
sunny
Hallo,
Ich hab mal eben eine Beispielseite gebastelt - die relevanten Teile sollten vorkommen.
da dürften gleich mehrere Probleme auftreten, weil das Script so wohl nicht zur Seite passt, und ein Layer geändert werden soll bevor er richtig existiert. Da kannst du dich mal durch die Fehlermeldungen der javascript-console durcharbeiten, und vielleicht auch die <noscript>-tags erstmal auskommentieren, und dem betr. div grössenangaben im stylesheet verpassen.
Grüsse
Cyx23
Hi,
da dürften gleich mehrere Probleme auftreten, weil das Script so wohl nicht zur Seite passt, und ein Layer geändert werden soll bevor er richtig existiert.
Hmm, das heißt der Scriptaufruf darf nicht innerhalb des Layers stattfinden? Aber selbst wenn ich die Variable erst später deklariere und dann die Funktion aufrufe kennt sie die Funktion nicht (die Var meine ich)!?
Da kannst du dich mal durch die Fehlermeldungen der javascript-console durcharbeiten,
Bei mir gibts nur eine Fehlermeldung, nämlich dass die Variable "undefined" ist. Gibts da sonst noch etwas das bei mir nicht angezeigt wird?
und dem betr. div grössenangaben im stylesheet verpassen.
Es geht ja nicht um die Größenangaben für das Div, sondern um die Größenangaben für das Flash, und die sind jeweils unterschiedlich, da müsste ich eine weitere Variable erstellen die dann dem Objekt eine jeweils unterschiedliche Klasse zuweist etc. Genau solche umständlichen "Dinge" wollte ich ja vermeiden indem ich jeweils vor Funktionsaufruf die Größenangaben sowie (noch wichtiger) die Mindestversion vom Flashplugin festlege. Sozusagen damit alles von "Außen" so leicht wie möglich steuerbar wird.
Gibts denn da keine Möglichkeit dass auch Netscape 4 meine Vars kennt?
Grüße,
sunny
Hallo nochmal,
jetzt habe ich mich doch dazu entschlossen alle Variablen durch die Funktion zu übergeben - anders hab ich keinen Lösungsweg gefunden.
Die Funktion wird jetzt also so aufgerufen:
detectFlash("datei.swf", "datei.jpg", "http://www.link.at", 5, 466, 58);
Das heißt meine Variablen stehen jetzt auch im NN zur Verfügung, so liest er sie korrekt ein.
Rausgeschrieben wird der betreffende Teil für NN dann so:
if (document.layers) {
document.open();
document.write('<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="' + width + '" height="' + height + '">');
document.write(' <param name="movie" value="../../../images/flash/' + ObjectName + '">');
document.write(' <param name="quality" value="high">');
document.write(' <param name="menu" value="false">');
document.write(' <embed src="../../../images/flash/' + ObjectName + '" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="' + width + '" height="' + height + '"></embed>');
document.write('</object>');
document.close();
}
Ohne das jeweilige Div dazu - das document.Flash.document.write(); konnte ja gar nicht funktionieren weil es sich ja um unterschiedliche Divs handelt, nicht immer nur um "Flash".
Das komische jetzt allerdings - es funktioniert nur teilweise (nur falls das Flash in einem PopUp vorkommt das ansonsten nichts beinhaltet), aber es wird der richtige Quelltext ausgegeben - wenn ich den SourceCode der ganzen Seite nämlich kopiere und in eine neue Datei gebe und diese mit dem NN aufrufe, dann stellt er alles korrekt dar ...
Das document.write schreibt das Richtige aus, auch an der richtigen Stelle, aber das Flash wird trotzdem nicht angezeigt.
Woran liegt das jetzt? Daran vielleicht dass durch die Funktion ein document.open(); aufgerufen wird und sich dadurch NN nicht mehr "auskennt"!?
Kann ich das irgendwie umgehen?
Grüße,
sunny
Hallo,
Woran liegt das jetzt?
insbesondere das document.close(); dürfte falsch sein wenn die Seite noch aufgebaut wird, und für Netscape kann es etwas eleganter sein nur ein document.write durchzuführen.
Grüsse
Cyx23
Hi Cyx23,
insbesondere das document.close(); dürfte falsch sein wenn die Seite noch aufgebaut wird, und für Netscape kann es etwas eleganter sein nur ein document.write durchzuführen.
Das hatte ich schon versucht, aber wie gesagt dann funktioniert das ganze nur wenn es sich um ein Flash in einem PopUp handelt. Also um eine Seite in der nur das Flash geladen wird und ansonsten keine Elemente vorkommen.
Für das Flash in der Seite direkt wird das document.write(); dann gar nicht ausgeführt - im SourceCode steht noch immer:
<script language="JavaScript" type="text/javascript">
<!--
detectFlash("company.swf", "company.jpg", "", 5, 310, 164);
//-->
</script>
Und die Fläche wo das Flash angezeigt werden sollte bleibt natürlich leer. Er schreibt in das Div nichts rein :-(
Warum denn nur ... ?
Grüße,
sunny
Sorry,
habe den aktuellen Link vergessen - die Testdatei hab ich abgeändert:
http://http://www33.brinkster.com/enomis/testdatei/
Grüße,
sunny
Guten Morgen,
hat niemand mehr eine Idee wie ich die Detection auch für Netscape 4 korrekt ausführen kann? Ich weiß einfach keine Lösung mehr, sämtliche Varianten die ich durchprobiert habe funktionieren nur halb ... und die ID des Divs möchte ich nicht unbedingt auch noch über die Funktion mitgeben ... sollte ja doch eher einfach gehalten werden dass ganze ... einfach aber funktionierend - ich komm irgendwie nicht mehr weiter :-(
Grüße,
sunny
Hallo,
hat niemand mehr eine Idee wie ich die Detection
das dürfte jetzt wirklich kein Netscape 4 Problem mehr sein, du kannst ja mal beim Flash-Hersteller usw. recherchieren wie eine Pluginerkennung aussehen sollte.
Grüsse
Cyx23
Hi again,
hat niemand mehr eine Idee wie ich die Detection
das dürfte jetzt wirklich kein Netscape 4 Problem mehr sein, du kannst ja mal beim Flash-Hersteller usw. recherchieren wie eine Pluginerkennung aussehen sollte.
Doch, die PlugIn-Erkennung funktioniert ja - auch im NN4 - aber leider führt er mir das document.write() nicht so aus wie ich es brauchen würde. Und somit wird der richtige Code nicht in meine Seite geschrieben (sondern der Funktionsaufruf bleibt im SourceCode stehen) und statt des Flash wird gar nichts angezeigt :-(
Grüße,
sunny
Es liegt halt daran dass das div immer mitangegeben muss sobald es positioniert wurde, und genau das macht das Script halt unflexibel, das wollte ich umgehen ... das scheint aber nicht möglich zu sein. Leider.
Lg,
sunny
Hallo,
Doch, die PlugIn-Erkennung funktioniert ja - auch im NN4 - aber leider führt er mir das document.write() nicht so aus
dann nimm doch einfach für alle Browser / Situationen die betr. div aus dem HTML, und bau passend document.write('<div id="Banner">'); und document.write('</div... mit in das Script ein.
Grüsse
Cyx23
Hi,
dann nimm doch einfach für alle Browser / Situationen die betr. div aus dem HTML, und bau passend document.write('<div id="Banner">'); und document.write('</div... mit in das Script ein.
Ja aber das ist genau das was ich nicht machen möchte (muss ich aber wohl) - weil ich möchte dass das Script auch eingesetzt werden kann wenn das Flash nicht in einem Div liegt bzw. ohne den Namen des Divs (falls es denn in einem liegt) auch noch mitübergeben zu müssen. Das Ding sollte ganz einfach [für den nächsten der es (bei einer anderen website) einsetzt] gehalten werden ...
Die "anderen" Browser wollen ja auch nicht wissen wie das Div heißt in dem das Flash angezeigt werden soll oder ob das Movie überhaupt in einem Div drin ist. Aber das kann man dem Netscape4 wohl nicht beibringen ... ich find jedenfalls leider keine Möglichkeit!?
Grüße,
sunny
Hallo,
Die "anderen" Browser wollen ja auch nicht wissen wie das Div heißt in dem das Flash angezeigt werden soll oder ob das Movie überhaupt in einem Div drin ist. Aber das kann man dem Netscape4 wohl nicht beibringen ... ich find jedenfalls leider keine Möglichkeit!?
dann versteh ich nicht wozu das div überhaupt da ist, zumal mit position:relative.
Du schreibst ja mittlerweile direkt rein, also muss Netscape 4 auch nicht wissen wie es heisst.
Setz im Style einfach ein * davor, also:
* #Banner {
position:relative;
}
oder willst du hinterher noch die visibility oder left / top ändern?
Sonst könnte für Netscape 4 als Notlösung noch ein ilayer eingeflickt werden.
Grüsse
Cyx23
Hi,
dann versteh ich nicht wozu das div überhaupt da ist, zumal mit position:relative.
Ähm naja das war nur damit es sich verhält wie ein Layer (in der Testseite - ich wollte kein elendslanges CSS mit position:absolute; und Positionierungswerten reinschreiben) - für Testzwecke reicht das CSS ja auch so aus.
In der echten Datei sind die Divs alle absolut positioniert :-(
Du schreibst ja mittlerweile direkt rein, also muss Netscape 4 auch nicht wissen wie es heisst.
Naja im obigen Fall leider doch.
Setz im Style einfach ein * davor, also:
* #Banner {
position:relative;
}
oder willst du hinterher noch die visibility oder left / top ändern?
Nein hinterher will ich nichts mehr ändern, ich möchte nur den FlashCode reinschreiben. Das wärs schon um mich happy zu machen!
Sonst könnte für Netscape 4 als Notlösung noch ein ilayer eingeflickt werden.
Ein ilayer im absolut positionierten Div?
Grüße,
sunny
Hallo,
In der echten Datei sind die Divs alle absolut positioniert :-(
das wär ja mal was wenn die Testumgebung sich endlich den nötigen Anforderungen nähert!
Netscape 4 kann kein umfasendes innerHTML, d.h. die Grösse der divs ist nur begrenzt veränderlich bzw. andere Elemente hätten Probleme zu rücken, und weiterhin ist dann die Methode mit open write close nachvollziehbar um ein _bestehendes_ div neu zu schreiben. D.h. für Netscape ein Ändern der Divs z.B. nach dem Aufbau der Seite statt mittendrin.
Grüsse
Cyx23
Guten Morgen!
In der echten Datei sind die Divs alle absolut positioniert :-(
das wär ja mal was wenn die Testumgebung sich endlich den nötigen Anforderungen nähert!
Naja für mich gings nur um das document.write dass ich nicht so ausführen kann dass es auch für NN passt ... falls ich damit Verwirrung gestiftet hab - sorry.
Netscape 4 kann kein umfasendes innerHTML, d.h. die Grösse der divs ist nur begrenzt veränderlich bzw. andere Elemente hätten Probleme zu rücken,
Ich möchte die Größe von dem div ja auch gar nicht verändern. Die kriegt es eh schon aus dem (echten) CSS und das Flash das dann "reingeschrieben" werden soll ist genau gleichgroß, das kriegt noch die Werte zugewiesen.
und weiterhin ist dann die Methode mit open write close nachvollziehbar um ein _bestehendes_ div neu zu schreiben. D.h. für Netscape ein Ändern der Divs z.B. nach dem Aufbau der Seite statt mittendrin.
Aber selbst dann muss ich ja erst recht mitgeben in welches div er schreiben soll, oder etwa nicht? Woher soll NN sonst nach dem Funktionsaufruf wissen wo das Ding jetzt hinkommt!? Sowie auch die anderen Browser ... ich versteh das jetzt nicht so ganz :(
Verwirrte Grüße,
sunny
Hab ich vergessen: Die Testdatei habe ich übrigens angepasst und alle Divs absolut positioniert, allerdings mit "irgendwelchen" Werten und nicht mit den realen - aber ich denke mal das sollte keine Rolle spielen.
Grüße,
sunny
Hallo,
wenn du im HTML die divs so abänderst:
<div id="Flash">
</div>
<script lang...
siehst du dass Netscape 4 die divs immerhin findet und schreibt, allerdings noch die Formatierung verliert, dazu solltest du im Archiv o.ä. fündig werden. Für die anderen Browser dann u.U. statt mit document.write mit innerHTML=" .."+" .."; arbeiten.
<div id="Flash">
<noscript><img src... /hier das nosrcipt hin, aber prüfen ob der noscript-tag Netscape 4 stört.
</div>
<script lang...
Grüsse
Cyx23
Hallo!
wenn du im HTML die divs so abänderst:
<div id="Flash">
</div>
<script lang...
siehst du dass Netscape 4 die divs immerhin findet und schreibt, allerdings noch die Formatierung verliert, dazu solltest du im Archiv o.ä. fündig werden. Für die anderen Browser dann u.U. statt mit document.write mit innerHTML=" .."+" .."; arbeiten.
Mh ja schreiben tut er schon - aber jetzt natürlich (wenn nur document.write();) außerhalb des divs. Das Problem ist ja im Grunde das, dass ich das betreffende div nicht über die JavaScript-Function mitgeben will.
Und genau das scheint irgendwie für Netscape 4 nicht möglich zu sein. Oder hab ich bei Deinem Beispiel jetzt etwas falsch verstanden?
Hab die Testdatei wieder aktualisiert ...
Lg,
sunny
Hallo,
wenn du im HTML die divs so abänderst:
<div id="Flash">
</div>
<script lang...
siehst du dass Netscape 4 die divs immerhin findet und schreibt, allerdings noch die Formatierung verliert, dazu solltest du im Archiv o.ä. fündig werden. Für die anderen Browser dann u.U. statt mit document.write mit innerHTML=" .."+" .."; arbeiten.Mh ja schreiben tut er schon - aber jetzt natürlich (wenn nur document.write();) außerhalb des divs. Das Problem ist ja im Grunde das, dass ich das betreffende div nicht über die JavaScript-Function mitgeben will.
das "(wenn nur document.write();)" hatte ja einen Sinn beim Scriptaufruf im (noch nicht existierenden) Div. Jetzt musst du es halt wieder entspr. anpassen, und dir notfalls ein paar Grundlagen über JavaScript oder über dhtml für Netscape 4 zukommen lassen.
Grüsse
Cyx23
Hi,
das "(wenn nur document.write();)" hatte ja einen Sinn beim Scriptaufruf im (noch nicht existierenden) Div. Jetzt musst du es halt wieder entspr. anpassen, und dir notfalls ein paar Grundlagen über JavaScript oder über dhtml für Netscape 4 zukommen lassen.
Naja es geht ja eigentlich darum, den Code für das Flash wenn nötig (und nur dann) in ein Div zu schreiben, aber ohne den Namen des Divs noch mitzuübergeben. Und das scheint wohl für Netscape4 nicht möglich zu sein, das war jetzt eigentlich die Frage um die es am Ende ging.
Ich denke es wird nicht gehen, oder?
Grüße,
sunny
Hallo,
das "(wenn nur document.write();)" hatte ja einen Sinn beim Scriptaufruf im (noch nicht existierenden) Div. Jetzt musst du es halt wieder entspr. anpassen, und dir notfalls ein paar Grundlagen über JavaScript oder über dhtml für Netscape 4 zukommen lassen.
Naja es geht ja eigentlich darum, den Code für das Flash wenn nötig (und nur dann) in ein Div zu schreiben, aber ohne den Namen des Divs noch mitzuübergeben. Und das scheint wohl für Netscape4 nicht möglich zu sein, das war jetzt eigentlich die Frage um die es am Ende ging.
Ich denke es wird nicht gehen, oder?
da müsste ich dir das wohl gegen Honorar schreiben. Ansonsten wenn du keine passende Vorlage findest und dich selbst mehr einarbeiten möchtest gibt es mindestens zwei mögliche Lösungswege, so z.B. Bedingungen zu schaffen im Div selbst schreiben zu können, oder die Übergabe der Indentifizierung zu automatisieren, aber dabei werd ich es jetzt mal belassen EOT
Grüsse
Cyx23
Hallo,
eigenartig ... Wie ist es mit folgender Kombination:
meinscript.js
var MeineVariable=0;
MeineFunction(...) {
alert(MeineVariable);
*.html
MeineVariable=1;
MeineFunction(...);
usw ...
Ich habe hier leider keinen NN4 um es auszuprobieren.
Grüße,
Maxx (aka Jochen)
Hi Maxx,
dann wird ist der Wert immer 0 - der neue Wert aus der HTMLDatei wird nicht verwendet ... das ist ja genau das Problem.
Lg,
sunny