Django: Auf javascript prüfen

Hallo, ich habe da folgendes "kleines" Problemchen:
Meine Webseiten werden überwiegend via PHP generiert, da u.a. Daten aus einer MySQL Datenbank zur Verfügung gestellt werden. Auswahlkriterien sind in Formularen über SELECT, Checkboxes usw. realisiert. Javascript kommt nur insofern zur Anwendung, wie ich z.B. nach Änderung eines Selectfeldes die DB-Anfrage neu starte ohne dass der Submit-Button gedrückt werden muss bzw. ich zu einzelnen Feldern eine entsprechende Hilfe zur Verfügung stellen möchte. Jetzt ist es für mich aber wichtig, bereits beim Starten der Seite in Erfahrung zu bringen, ob ein Besucher Javascript auf seinem Rechner laufen lässt oder nicht, da sich dadurch die Funktionalität und der Ablauf ändert. Hilfe-Icons über die Seite zu verstreuen, die mangels Javascript keine Funktion erfüllen, erscheint mir wenig sinnvoll, also würde ich via PHP diese erst gar nicht generieren. Das gleiche gilt für Submit-Buttons, die nur dann vorhanden sein müssen, wenn Javascript deaktiviert ist. Mein erster Ansatz war, einen über Javascript bei body onload= gesetzten Cookie via PHP wieder auszulesen (was auch nach einem Reload der Seite prima funktioniert und auch richtige Werte liefert!). Missfallen tut mir allerdings daran, dass auch all jene fälschlich als deaktiviert angezeigt würden, die nur die Cookie-Annahme deaktiviert haben (was ja nu' überhaupt nichts zur Lösung meines Problems beiträgt). Und was nun? Den NOSCRIPT-Bereich "zweckzuentfremden" zeigt auch keine Lösung, da PHP-Variablenzuweisungen auch in diesem Bereich immer ausgeführt werden. Ein anderer Ansatz war, via document.write einen Wert auf die Seite zu schreiben und diese dann im Anschluss mit php zu parsen (aber eigentlich ist mir dass zu doof, auch wenn's vom Ansatz her funktioniert)
Hat irgend einer von Euch eine zündende Idee, wie eine akzeptable Lösung aussehen könnte? Der Ablauf müsste sein, dass ich via Javascript eine Aktion auslöse, die ich via PHP abfragen/prüfen kann!
Das wär's auch schon (schwitz);
Was immer Euch einfallen mag, her damit. Ich werd's mit zittrigen Händen an der Tastatur ausprobieren!

  1. Hallo,

    ich würde es einfacher angehen:

    1. Es gibt Elemente, die der Benutzer nur sehen soll, wenn bei ihm Javascript aktiviert ist. Also: erzeuge diese Elemente doch ganz einfach dynamisch per Javascript, indem Du sie dynamisch in dem DOM-Baum hineinhängst.
    2. Es gibt Elemente, die nur für Benutzer ohne Javascript sichtbar sein sollen. Hier gehst Du umgekehrt vor: nach dem Laden des Dokuments werden diese Elemente mittels Javascript aus dem DOM-Baum entfernt.

    Et voilà!

    Hilft Dir das weiter, oder habe ich Dein Problem mißverstanden?

    Grundsätzlich solltest Du Dich übrigens mit dem Stichwort "unobtrusive javascript" befassen - das ist genau das Thema, um das es hier geht.

    Ciao,
    Andreas

    --
    "Das Corporate Design für das Internet sieht eine Reihe von Grafikelementen vor, die die Optik der Webseite visuell und funktionell beeinflussen." - (Zitat aus dem "Styleguide Corporate Design"  eines großen Konzerns...)
    1. hi,

      1. Es gibt Elemente, die nur für Benutzer ohne Javascript sichtbar sein sollen. Hier gehst Du umgekehrt vor: nach dem Laden des Dokuments werden diese Elemente mittels Javascript aus dem DOM-Baum entfernt.

      Wozu?
      Genau dafür ist noscript doch wunderbar geeignet.

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }
      1. Hallo,

        Wozu?
        Genau dafür ist noscript doch wunderbar geeignet.

        äh, ja richtig.

        Die Hitze....
        ;)

        Ciao,
        Andreas

        --
        "Das Corporate Design für das Internet sieht eine Reihe von Grafikelementen vor, die die Optik der Webseite visuell und funktionell beeinflussen." - (Zitat aus dem "Styleguide Corporate Design"  eines großen Konzerns...)
      2. Hi,

        Wozu?
        Genau dafür ist noscript doch wunderbar geeignet.

        Andreas' Weg ist dann praktisch, wenn man nur neuere Browser mit JS bedienen möchte. Denn: der NOSCRIPT-Inhalt wird von *allen* Browsern angezeigt, die JS deaktiviert haben (OK, und auch vom NN2 ;-)).

        Beispiel:

        Text für alle Browser<br>
        <div id="noscript">Text für alle Browser ohne JS oder mit veraltetem JS (ohne DOM)</div>
        <noscript>Text für alle Browser ohne JS</noscript>

        Ein DOM-fähiger Browser würde einfach das DIV rausschmeißen. ;)

        Gruß, Cybaer

        --
        Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
    2. Danke für den Tip, aber...... (jetzt kommt's :-)

      ich würde es einfacher angehen:

      (möcht' ich ich auch!!!!!)

      1. Es gibt Elemente, die der Benutzer nur sehen soll, wenn bei ihm Javascript aktiviert ist. Also: erzeuge diese Elemente doch ganz einfach dynamisch per Javascript, indem Du sie dynamisch in dem DOM-Baum hineinhängst.

      Bis dato habe ich mich immer nur am Rande mit Javascript beschäftigt. Meine Leidenschaft gehört PHP. Wenn überhaupt JS, dann nur so viel, um den Komfort meiner Seite(n) wenigstens etwas zu erhöhen. Ansonsten gehöre ich eher der Anhängerschaft an, die da rudimentär meint, es muss auch alles ohne gehen. Zum einen, weil meine Seiten nicht davon abhängig sein sollen, ob Benutzer ihr Scripting abschalten oder nicht und zum Anderen ärgere ich mich immer wieder die Platze, wenn ich auf Seiten namhafter Anbieter lande, die mich dann mit Javascript-Fehlermeldungen bombardieren und fast nix so funktioniert, wie's soll (und zwar ohne mein zutun!). Was ich mit PHP mache, funktioniert überall (oder überhaupt nicht, wenn ich Mist baue!). Deshalb im DOM rumzufummeln, wär' mir schon zuviel des guten (zumal ich zig Formulare auf zig Seiten habe =>DB-Abfragen, => Datenanzeigen, =>Filterkriterien, =>Auswahlabfragen usw. usf.). Ausserdem bin ich ein fauler Sack. Deshalb schreibe ich auch meist nur einige wenige Funktionen (wenn möglich), die ich dann mit den entsprechenden Parametern aufrufe. So bin ich natürlich an einer Lösung interessiert, in dem ich in solch einer Funktion nur ein Flag testen muss und alles geht danach von selbst (Du verstehst?). Deswegen suche ich irgendeinen Weg, der beim ersten Aufruf meiner Seite eine Javascript Aktion generiert, deren Erfolg (oder eben auch Mißerfolg) ich danach mittels PHP auswerten kann (eben um ein Flag zu setzen).

      1. Es gibt Elemente, die nur für Benutzer ohne Javascript sichtbar sein sollen. Hier gehst Du umgekehrt vor: nach dem Laden des Dokuments werden diese Elemente mittels Javascript aus dem DOM-Baum entfernt.

      Das habe ich nicht verstanden. Wenn jemand z.B. im IE ActiveScripting abstellt, wie kann er dann Elemente mittels Javascript entfernen?

      Grundsätzlich solltest Du Dich übrigens mit dem Stichwort "unobtrusive javascript" befassen - das ist genau das Thema, um das es hier geht.

      Kenn ich nich', worum geht's da?

      Aber trotzdem, vielen Dank. Hast Du vielleicht noch eine andere Idee auf der Pfanne?
      Frank

      1. Hallo

        1. Es gibt Elemente, die nur für Benutzer ohne Javascript sichtbar sein sollen. Hier gehst Du umgekehrt vor: nach dem Laden des Dokuments werden diese Elemente mittels Javascript aus dem DOM-Baum entfernt.

        Das habe ich nicht verstanden. Wenn jemand z.B. im IE ActiveScripting abstellt, wie kann er dann Elemente mittels Javascript entfernen?

        Falschrum. Elemente, die nur der sehen soll, der _kein_ JavaScript zur Verfügung hat, werden, so JavaScript da ist, entfernt. Somit sieht sie nur der, dem sie, weil JavaScript _nicht_ da ist, nicht ausgeblendet werden können.

        Soweit Andreas' Überlegung. wahsaga wies aber bereits darauf hin, dass dafür das Element <noscript> da ist.

        Tschö, Auge

        --
        Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
        (Victor Hugo)
        Veranstaltungsdatenbank Vdb 0.1