AW: jQuery Frage
hi
abseits einer "problem"-lösung (in anführungszeichen, weil es sich hier um kein wirkliches problem handelt, sondern um einen visuellen effekt) solltest du auf jedenfall folgendes bedenken:
es sollte – ob du die inhalte via XHR (ajax) nachlädst oder wie auch immer – für den seitenbesucher möglich sein, die inhalte die sich hinter einem menüpunkt verstecken auch direkt anzusprechen. die erfahrung hat gezeigt, dass user verlinkungen speichern bzw. als bookmark in ihre favoriten aufnehmen sowie anderen usern posten, mailen, etc.
die gewohnte user-experience ist, dass ein weitergereichter/gespeicherter link ohne umwege zu den gewünschten inhalten verweist. werden diese inhalte nun via XHR geladen, ändert sich die url der seite nicht, es wird (normalerweise) immer der quasi "standard"-inhalt der seite geladen (eben das, was tatsächlich initial innerhalb des markups steht).
ein kurzes gedankenspiel:
bei einer normalen verlinkung:
ein user betritt deine seite "index.html". er klick auf einen der menüpunkte. dies hat zur folge, dass eine neue seite geladen wird, nennen wir sie einfach mal "about.html". sobald dies geschieht, ändert sich die adresszeile des browsers von "www.deine-adresse.de/index.html" zu "www.deine-adresse.de/about.html". der user findet die seite "about.html" total interessant, hat aber leider nicht direkt zeit, sodass er sie speichert.
er kann am nächsten tag seinen browser öffnen und auf seine bookmark klicken, die ihn direkt zu seinen gesuchten inhalten führt (also zur seite "about.html"). alles ist super, der user ist zufrieden weil er an seine inhalte kommt und du bist zufrieden, weil der user zufrieden ist. die welt ist herrlich
)
bei xhr:
ein user betritt deine seite "index.html". er klick auf einen der menüpunkte. dies hat zur folge, dass neue inhalt von "about.html" geladen werden. sobald dies geschieht, ändert sich die adresszeile des browsers in diesem fall allerdings
nicht von "www.deine-adresse.de/index.html" zu "www.deine-adresse.de/about.html" – innerhalb der adresszeile steht nach wie vor "index.html". der user findet die inhalte von "about.html" total interessant, hat aber leider nicht direkt zeit, sodass er sie speichert (sprich: eine bookmark setzt). genau jetzt beginnt aber ein problem: die bookmark verweist eben nicht auf die inhalte von "about.html", sondern weiterhin auf "index.html".
wenn er am nächsten tag seinen browser öffnet und auf seine bookmark klickt, die ihn direkt zu seinen gesuchten inhalten führen soll (also zur seite "about.html") wird sie genau das aber nicht tun – der user bekommt die inhalte von "index.html" zu sehen, weil seine bookmark dorthin verweist anstatt auf "about.html".
dies hat im schlimmsten fall zur folge (und dieser tritt gerade hier extrem häufig ein), dass der user deine seite verlässt und seine bookmark wieder löscht. auf jeden fall wird die zufriedenheit des besuchers sinken, weil er nicht wie gewohnt direkt an seine gesuchten inhalte kommt.
um dem entgegenzuwirken, könntest du mit sog. hashes (-> #) in deinen urls arbeiten, sodass bei einem klick auf einen menüpunkt die adresse in der adresszeile des browsers geändert wird zu "index.html#about". dann müsstes du allerdings beim laden der seite auslesen, ob die url einen solchen hash schon enthält und falls ja, die entsprechenden inhalte nachladen. damit könntest du dein problem lösen, dass ein besucher einen spezifischen inhalt nicht direkt ansteuern kann. wunderbar. oder sagen wir: eigentlich nicht. du bekommst nämlich neue probleme.
zum einen benötigen die suchmaschinenbots (sofern sie deine inhalt überhaupt indexieren können) eine spezifische form, wie eine url mit hash aussehen muss, damit sie indexiert werden kann und im ranking von suchergebnissen auftaucht. es gibt hierzu eine anleitung von google (leider finde ich gerade den link nicht, eine adäquate alternativanleitung findest du
hier).
zum anderen setzt ein unschöner effekt ein: der user bekommt zunächst die inhalte von "index.html" zu sehen, diese "verschwinden" plötzlich und dann erst werden die inhalte von "about.html" dargestellt. dieser effekt tritt ein, weil dein javascript frühestens anfängt zu arbeiten, nachdem das komplette DOM der seite vom browser geladen und geparst wurde. natürlich könntest du dein javascript auch schon früher anfangen lassen zu arbeiten – verbunden mit der gefahr (die sehr hoch ist), dass der browser schon beim laden der seite sog. "DOMExceptions" wirft. dabei handelt es sich um fehler, die entstehen wenn operationen innerhalb des DOMs passieren die nicht möglich sind. läuft dein javascript also schon ab, bevor das DOM geladen und geparst ist, setzt du dich der gefahr aus, dass eine solche exception geworfen wird und dein javascript danach gar nicht mehr weiterarbeitet. mit anderen worten: der user kann überhaupt nicht mehr auf deiner seite navigieren, da sämtliche inhalte über javascript geladen werden, welches aber aufgrund der DOMException nicht mehr weiter arbeitet. der user bekommt ein leere seite zu gesicht. auch nicht so schön.
alternativ gäbe es natürlich die möglichkeit, deine seite "leer" zu lassen, also keine inhalte in index.html zu schreiben und statt dessen direkt einen xhr-call auszuführen um inhalte zu laden. leider "bestraft" google leere pages mit einen ziemlich schlechten ranking (verständlich), user ohne oder mit ausgeschaltetem javascript bekommen sowieso nichts zu sehen (und nein, nicht jeder user kann javascript nach belieben ein- und ausschalten – man denke hier nur an menschen in firmen, deren administratoren die browsereinstellungen vorgeben) und zudem erhöht sich auch die ladezeit der seite da ja erstmal ein ajax-request abgeschickt und wieder zurück kommen muss. mit anderen worten: doch keine alternative.
damit wären wir vom frontend beinahe auch schon am ende der möglichkeiten. geht da vielleicht server-seitig was? ja.
du könntest die seiten auf dem server cachen und die gecachten versionen auf anfrage mit php verarbeiten und ausliefern. damit wären dann auch deine probleme gelöst (naja, zumindest fast – "feinheiten" spare ich mir jetzt mal). allerdings sollte man den aufwand, der betrieben werden muss um so etwas zu erreichen nicht auf die leichte schulter nehmen.
du solltest dir also ernsthaft die frage stellen, ob sich der oben beschriebene, nötige aufwand lohnt, um einen visuellen effekt wie das ein-/ausfahren der inhalte zu realisieren oder ob du mit einfachen verlinkungen nicht wesentlich besser fährst. auf andere argumente wie beispielsweise nicht mehr "korrekt" funktionierende vor/zurück buttons des browsers bin ich jetzt mal gar nicht eingegangen.
ich für meinen teil denke nicht dass es sich lohnt – aber es geht hier ja um dich, deine seite und deine besucher
gruß