gibt es in Javascript eine Möglichkeit, sich alle Variablen
eines Scripts anzeigen zu lassen? Ich kenne sowas von PHP:
Da gibt's das Array $GLOBALS.
Ich habe es schon mit verschiedenen Firefox-Extensions versucht.
So z.B. "Javascript Debugger", was ich aber eher weniger
begreife. Das zeigt mir zwar die Ansicht "local variables", die
aber immer leer ist.
Gruß
JPM
> gibt es in Javascript eine Möglichkeit, sich alle Variablen
> eines Scripts anzeigen zu lassen? Ich kenne sowas von PHP:
> Da gibt's das Array $GLOBALS.
Globale Variablen sind in JavaScript Eigenschaften des globalen
Objektes, im Browser ist das das window-Objekt. Man kann (aufzählbare)
Eigenschaften per for...in aufzählen:
var ul = document.createElement('ul');
for (var propertyName in window) {
var li = document.createElement('li');
li.appendChild(document.createTextNode(propertyName + ': ' +
window[propertyName]));
ul.appendChild(li);
}
document.body.appendChild(ul);
Dabei werden aber alle aufzählbaren Eigenschaften des window-Objektes
aufgezählt, nicht nur globale Variablen. Also auch globale Funktionen
und alles was der Browser sonst so fuer das window-Objekt anbietet.
Lokale Variablen lassen sich allerdings nicht per Code inspizieren.
--
Martin Honnen
http://JavaScript.FAQTs.com/
Dann hast du vielleicht keine lokale Variabeln in deinem Skript
Struppi.
Globale Variablen sind in ECMAScript-Implementationen Eigenschaften des
Globalen Objekts. Benutzerdefinierte Eigenschaften sind aufzählbare
Eigenschaften eines Objekts. In Netscape JavaScript (NN, Geckos) und
Opera ECMAScript (und vermutlich auch in KHTML) kann man daher über das
Globale Objekt iterieren:
var a = new Array();
for (var p in this)
{
a.push(p);
}
window.alert(a.join(", "));
Das liefert alle aufzählbaren Eigenschaften, nicht nur benutzerdefinierte
Variablen. In Microsoft JScript (MSHTML, z.B. IE) tauchen (deklarierte)
Variablen bei dieser Iteration leider nicht auf.
> Ich habe es schon mit verschiedenen Firefox-Extensions versucht.
> So z.B. "Javascript Debugger", was ich aber eher weniger
> begreife.
Der JavaScript Debugger Venkman ist für Firefox nur bedingt brauchbar, da
er sich z.B. nur einmal öffnen lässt (lt. Aussage der Venkman-Entwickler ein
Firefox-Bug). Firebug[1] hat dieses Problem nicht, und ich finde ihn auch
wesentlich eleganter (da weniger überladen).
> Das zeigt mir zwar die Ansicht "local variables", die aber immer leer ist.
Lokale Variablen sind keine globalen; sie sind nur definiert, wenn die
betreffende Methode aufgerufen wird, und selbst dann gibt es keinen Zugriff
auf das Variablenobjekt des lokalen Kontextes (für eine Auflistung hilft
dort also wirklich nur ein Debugger).
Wenn Du allerdings nur globale Variablen hast, ist das ein Anzeichen für
schlechten Programmierstil.
PointedEars
___________
[1] http://getfirebug.com/
--
Der erfahrene IE-Fahrer weiß, daß man Slalom am besten im ersten Gang fährt,
weil schnelles Lenkradumreißen bei IE zum Lenkradabreißen führt. Wer
sportlich fahren will, muß Netscape fahren und hin und wieder auch mal
anschieben. ;-) --Georg Maaß, dcljs, <amuqrl$91i3q$1...@ID-3551.news.dfncis.de>
Richtig.
> im Browser ist das das window-Objekt.
Falsch.
PointedEars
--
Dann mußt Du aber eine andere DTD in den Dogtype eintragen,
weil Dich sonst das W3C beißt.
(Georg Maaß in dcljs <an4mm7$aur11$2...@ID-3551.news.dfncis.de>)
Danke, das ist schon mal recht interessant, hilft mir aber wenig.
Ich will einfach mal das Problem beschreiben:
Unser Backend einer Online-Benutzerverwaltung wollte ich etwas aufmotzen.
Dafür fand ich jquery und das Plugin Tablefilter interessant. Damit
bekomme ich eine Tabelle mit, Filter-Feldern, Sortierung, usw.
Für noch mehr Komfort habe ich da noch etwas Ajax eingebaut. Also zum
Beispiel eine Checkbox, die beim ändern auch gleich im Hintergrund in
die Datenbank ändert. Oder eine Adressänderung innerhalb der Tabelle,
ohne sie ganz neu zu laden. Es nützt aber nicht viel. Wenn ich so
eine Adresse ändere, ändert sie sich zwar wie gewollt in der DB, auch
"sichtbar" in der Tabellenzelle klappt es, aber eben nicht im Javascript.
Also ich meine, in diesem Script-Monster Tablefilter muss es sicher doch
intern irgendwo ein Array oder so geben, was die ganzen Tabellenzellen
enthält. Und genau da möchte ich das auch ändern.
Gruß
JPM
Es ist eine Antwort auf Deine Frage.
> Ich will einfach mal das Problem beschreiben:
Gute Idee.
> Unser Backend einer Online-Benutzerverwaltung wollte ich etwas aufmotzen.
> Dafür fand ich jquery und das Plugin Tablefilter interessant.
jQuery ist Müll, solange es Browsererkennung benutzt. Auch ist es mit 22k
(Kompaktversion!) viel zu gross für das was es tut, und viel zu gross fürs Web.
> Damit bekomme ich eine Tabelle mit, Filter-Feldern, Sortierung, usw.
>
> Für noch mehr Komfort habe ich da noch etwas Ajax eingebaut.
Hoffentlich mit Fallback für a) nicht-griechische[tm] User und b) User ohne
Script-Support.
> Also zum Beispiel eine Checkbox, die beim ändern auch gleich im Hintergrund
> in die Datenbank ändert.
Den Server und das DBMS wird es freuen, jetzt bekommen sie bei einem
unentschiedenen User endlich mal ein paar Anfragen, die sie so richtig
schön auslasten.
> Oder eine Adressänderung innerhalb der Tabelle, ohne sie ganz neu zu laden.
> Es nützt aber nicht viel. Wenn ich so eine Adresse ändere, ändert sie sich
> zwar wie gewollt in der DB, auch "sichtbar" in der Tabellenzelle klappt es,
> aber eben nicht im Javascript. Also ich meine, in diesem Script-Monster
> Tablefilter muss es sicher doch intern irgendwo ein Array oder so geben,
> was die ganzen Tabellenzellen enthält. Und genau da möchte ich das auch ändern.
Das ist schon mal recht interessant, hilft mir jedoch wenig (dabei, Dir zu
helfen).
Beherzige bitte die Hinweise auf http://dcljs.de/ ff.
PointedEars
--
Lass es mich so ausdrücken: Eigentlich werde ich keine Zeit haben, aber die
fürs Usenet übliche nehme ich mir. Nähme ich mir noch zusätzlich was vor,
würde ich womöglich das tun, um nicht das, das ich tun sollte, tun zu
müssen. -- Christoph Päper in <avl5ul$30fp$1...@ariadne.rz.tu-clausthal.de>
>> Unser Backend einer Online-Benutzerverwaltung wollte ich etwas aufmotzen.
>> Dafür fand ich jquery und das Plugin Tablefilter interessant.
>
> jQuery ist Müll, solange es Browsererkennung benutzt. Auch ist es mit 22k
> (Kompaktversion!) viel zu gross für das was es tut, und viel zu gross fürs Web.
War ja klar, daß das kommt. ;-)
Nur: Ich wäre niemals in der Lage so eine Anwendung komplett selber
in Javascript zu schreiben.
>> Damit bekomme ich eine Tabelle mit, Filter-Feldern, Sortierung, usw.
>>
>> Für noch mehr Komfort habe ich da noch etwas Ajax eingebaut.
>
> Hoffentlich mit Fallback für a) nicht-griechische[tm] User und b) User ohne
> Script-Support.
Wie ich andeutete, geht es hier nicht um etwas öffentliches.
Das nutzen 3-10 Mitarbeiter intern. Ich denke, da sind gewisse
Einschränkungen erlaubt. Ansonsten nehme ich von sowas auch Abstand.
>> Also zum Beispiel eine Checkbox, die beim ändern auch gleich im Hintergrund
>> in die Datenbank ändert.
>
> Den Server und das DBMS wird es freuen, jetzt bekommen sie bei einem
> unentschiedenen User endlich mal ein paar Anfragen, die sie so richtig
> schön auslasten.
Wie gesagt ... und ferner haben wir für die vielleicht 200 zusätzlichen
Scriptaufrufe bzw. DB-Abfragen pro *Tag*, dann doch noch /ein wenig/
Leistung übrig.
>> Oder eine Adressänderung innerhalb der Tabelle, ohne sie ganz neu zu laden.
>> Es nützt aber nicht viel. Wenn ich so eine Adresse ändere, ändert sie sich
>> zwar wie gewollt in der DB, auch "sichtbar" in der Tabellenzelle klappt es,
>> aber eben nicht im Javascript. Also ich meine, in diesem Script-Monster
>> Tablefilter muss es sicher doch intern irgendwo ein Array oder so geben,
>> was die ganzen Tabellenzellen enthält. Und genau da möchte ich das auch ändern.
>
> Das ist schon mal recht interessant, hilft mir jedoch wenig (dabei, Dir zu
> helfen).
OK, schon klar, Du kennst das Script ja nicht. Deshalb fragte ich ja
eingangs nach einer Möglichkeit, sich einfach *alle* Variablen anzeigen
zu lassen.
Also ich denke, ich komme jetzt selber nicht weiter und werde mich mal
an den Entwickler wenden.
> Beherzige bitte die Hinweise auf http://dcljs.de/ ff.
Das sind aber auch sehr interessante Seiten. Da werde ich sicher
gelegentlich mal genauer drauf schauen.
Gruß
JPM
Dann wird es Zeit, dass Du es lernst. So kompliziert ist es gar nicht, und
Unkenntnis schützt vor Strafe^W Bugs nicht.
>>> Damit bekomme ich eine Tabelle mit, Filter-Feldern, Sortierung, usw.
>>>
>>> Für noch mehr Komfort habe ich da noch etwas Ajax eingebaut.
>> Hoffentlich mit Fallback für a) nicht-griechische[tm] User und b) User ohne
>> Script-Support.
>
> Wie ich andeutete, geht es hier nicht um etwas öffentliches.
Das war für mich aus "Backend einer Online-Benutzerverwaltung" nun wirklich
nicht herauszulesen.
> Das nutzen 3-10 Mitarbeiter intern. Ich denke, da sind gewisse
> Einschränkungen erlaubt. Ansonsten nehme ich von sowas auch Abstand.
XHR ist gut[tm], solange man Fallbacks einbaut. Egal wo man es einsetzt.
>>> Also zum Beispiel eine Checkbox, die beim ändern auch gleich im Hintergrund
>>> in die Datenbank ändert.
>> Den Server und das DBMS wird es freuen, jetzt bekommen sie bei einem
>> unentschiedenen User endlich mal ein paar Anfragen, die sie so richtig
>> schön auslasten.
>
> Wie gesagt ... und ferner haben wir für die vielleicht 200 zusätzlichen
> Scriptaufrufe bzw. DB-Abfragen pro *Tag*, dann doch noch /ein wenig/
> Leistung übrig.
Wie Du meinst.
> OK, schon klar, Du kennst das Script ja nicht. Deshalb fragte ich ja
> eingangs nach einer Möglichkeit, sich einfach *alle* Variablen anzeigen
> zu lassen.
Das geht wie beschrieben, aber eben nicht überall.
> Also ich denke, ich komme jetzt selber nicht weiter und werde mich mal
> an den Entwickler wenden.
Gute Idee. Aber wenn Du schon nicht debuggen kannst/willst und keinen
Codeschnipsel postest, könntest Du immerhin ein paar Links posten.
Vielleicht ist der Leidensdruck bei einem Leser gross genug, sich das anzusehen.
PointedEars
--
Wo im W3C-DOM für XML ist document.write spezifiziert? Nirgendwo. Das
geht also nicht, Du mußt das Dokument Knötchen für Knötchen aufbauen.
Soviel vom W3C zum Thema "Verstehen Sie Spaß???".
(Georg Maaß in dcljs <an91cq$c0ogv$1...@ID-3551.news.dfncis.de>)
>> OK, schon klar, Du kennst das Script ja nicht. Deshalb fragte ich ja
>> eingangs nach einer Möglichkeit, sich einfach *alle* Variablen anzeigen
>> zu lassen.
>
> Das geht wie beschrieben, aber eben nicht überall.
>
>> Also ich denke, ich komme jetzt selber nicht weiter und werde mich mal
>> an den Entwickler wenden.
>
> Gute Idee. Aber wenn Du schon nicht debuggen kannst/willst und keinen
> Codeschnipsel postest, könntest Du immerhin ein paar Links posten.
> Vielleicht ist der Leidensdruck bei einem Leser gross genug, sich das anzusehen.
Das hätte ich nie gewagt ;-) Aber gut:
http://ideamill.synaptrixgroup.com/?p=13
Gruß
JPM