Alternative zu <noscript>

  • Hallo,


    ich möchte hier ein mal eine Alternative zum <noscript> Tag aufzeigen. Ich nehme hier als Beispiel eine Navigation die mit Ajax arbeitet. Zum Verstehen ist es nicht relevant Ajax zu können!


    Das Ziel ist es den Besucher nicht nur darauf hin zu weisen das in seinem Browser JavaScript deaktiviert ist, sondern gleich eine Alternative anzubieten.


    Unschön zu lösen wäre es dem Besucher einen Link zu einer Alternativen Datei anzubieten:



    Wir benötigen für diese Lösung nämlich jede HTML Datei 2 mal, das ist bei 2-3 Seiten zu verkraften, nicht aber bei 200.


    Was also tun?


    Im ersten Schritt erstellen wir 2 Menüs, eines mit der Ajax Anweisung in den Links und eines mit normalen Verweisen:


    Code
    <ul class="menu">
      <li><a href="javascript: ajax('link1.htm');">Link 1</a></li>
      <li><a href="javascript: ajax('link2.htm');">Link 2</a></li>
      <li><a href="javascript: ajax('link3.htm');">Link 3</a></li>
    </ul>
    <ul class="menu">
      <li><a href="link1.htm">Link 1</a></li>
      <li><a href="link2.htm">Link 2</a></li>
      <li><a href="link3.htm">Link 3</a></li>
    </ul>


    Nun ersetzen wir class="menu" mit IDs, das Ajax Menü erhält die ID menu_js, das normale Menü die ID menu:


    Code
    <ul id="menu_js">
      <li><a href="javascript: ajax('link1.htm');">Link 1</a></li>
      <li><a href="javascript: ajax('link2.htm');">Link 2</a></li>
      <li><a href="javascript: ajax('link3.htm');">Link 3</a></li>
    </ul>
    <ul id="menu">
      <li><a href="link1.htm">Link 1</a></li>
      <li><a href="link2.htm">Link 2</a></li>
      <li><a href="link3.htm">Link 3</a></li>
    </ul>


    Nun kommen wir zum CSS Part.


    Wir geben dem Ajax Menü folgende Eigenschaften:


    Code
    ul#menu_js {
      display: none;
    }


    Auf unserer Seite erscheint nun zunächst das normale Menü.


    Nun kommt JavaScritp ins Spiel.


    Der Trick:
    Das Ajax Menü darf nur angezeigt werden wenn JavaScript aktiviert ist, also lassen wir es doch mit JavaScript anzeigen, wir schreiben eine Funktion die das normale Menü verbirgt und das Ajax Menü anzeigt, da dies nur geschehen kann wenn JavaScript aktiviert ist haben wir was wir wollen :wink:


    Hier die JavaScript Funktion:



    Nun müssen wir nur noch die Funktion aufrufen, entweder über den <body>-Tag:


    Code
    <body onload="scriptAvailability('menu');">


    Oder per Script Tag vor dem schließenden </body>:


    Code
    <script>
        scriptAvailability('menu');
      </script>
    </body>


    Wollen wir das Ganze jetzt ein wenig dynamischer gestalten? Was wenn wir noch 3 weitere Elemente haben die wir überprüfen müssen?


    Als erstes erstellen wir eine neue Funktion, diese entfernt Leerzeichen am Anfang und am Ende von Strings, diese wird später noch wichtig:



    Siehe auch: PHP - Trim


    Als nächstes bauen wir unsere checkAvailability Funktion um, und zwar so das wir mehrere Elemente über die Variable v übertragen können, das Ganze sieht dann so aus:



    Nun können wir die Funktion wie folgt aufrufen:


    Code
    scriptAvailability('menu  , ueberschrift  ,         container');


    Dank der trim Funktion können wir auch Leerzeichen mit einbringen, das ist in so fern wichtig weil manche Programmierer etwas anders schreiben als Andere, ein Beispiel:


    Code
    testFunktion(parameter1,parameter2);
      testFunktion(parameter1, parameter2);


    Wir brauchen jetzt also nur jeweils 2 Elemente erstellen, IDs verteilen, _js an die ID mit dem Javascript anhängen, die ID_js ID per CSS ausblenden und die Funktion aufrufen.


    Den kompletten Quellcode zum downloaden habe ich als Anhang hinzugefügt.


    Viel Spaß beim rumprobieren, danke fürs Lesen und bis dann :wink:

  • Ganz Blöde frage.. aus welchem Grund Baust du dein Menü nicht ganz normal auf und änderst dann beim fertigen Laden die Links einfach um, bzw. gibst denen einfach ein click-Event, welches am Ende false zurück gibt um den "Ursprungslink" nicht auszulössen?

  • Vielleicht ja :/
    Wobei ich das <noscript> eigentlich nur dazu verwende dem Besucher zu informieren, dass er kein JavaScript aktiviert hat und dies bitte tun soll um alle Inhalte noch angenehmer genießen zu können.
    Im Grunde schreibe ich sogar alles erst so, dass es ohne JavaScript funktioniert und erweitere es dann mit JavaScript. Jedes meiner sich aufrollenden Menüs funktioniert erst mal nur mit purem CSS.
    Anschließend gebe ich ihm dann z.B. via jQuery einen SlideDown-Effekt.

  • Naja ich habe ja ganz oben beschrieben das man diese Funktion nutzen kann falls man den Besucher nicht nur einfa ch hinweisen will sondern ihm Arbeit abnehmen will, denn darum geht es denke ich, dem Besucher den Besuch der Seite so angenehm wie möglich zu gestalten.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!