Moin!
Wie Versprochen das Script, läuft ganz gut aber der einsatzt ist halt abzuwägen:
Viel Spass beim ausprobieren
Dein Skript macht nichts anderes, als man mit der Apache-Direktive "ErrorDocument" auch erreichen könnte: Wenn eine Seite nicht gefunden wird, kann man auch eine selbstdefinierte Seite senden.
Dies kann man schön machen, indem zur gleichbleibenden URL Statuscode 404 gesendet wird (die selbstdefinierte Fehlerseite ist also unter der nichtvorhandenen URL zu sehen), oder man regelt es so, dass ein Redirect auf die Fehlerseite erfolgt (was nicht gut ist, weil auch Suchmaschinen dann keinen 404 mehr erhalten, sondern einen Redirect - und Linkchecker, die nach 404 suchen, finden den broken link nicht mehr).
Was aber absolut nicht geht, ist der Einsatz deines Skriptes offline (was Hans in [pref:t=49637&m=271424] gefordert hatte). Wenn der Browser lokal nichts von Festplatte laden kann, existiert kein Server, der statt der nichtvorhandenen Datei einfach eine andere Seite schickt (deren Titel man auswerten kann), sondern der Browser wird eine eklige, nicht abfangbare Fehlermeldung ausgeben, dass die Seite nicht geladen werden konnte, und dann im vorherigen Zustand verharren.
Man kann die Ausgangsfrage "Wie kann ich den 404 mit Javascript _ABFANGEN_" wirklich zu 100% komplett mit "Das geht nicht" beantworten. Denn "abfangen" bedeutet für mich: Verhindern, dass er überhaupt auftritt. Das ist definitiv unmöglich.
Man kann, sofern ein Server existiert und einen 404-Statuscode mit selbstdefinierter Fehlerseite ausgibt, auf dieser Fehlerseite aber beliebiges Javascript integrieren, welches im Fehlerfall _reagieren_ kann. in location.href steht die fehlerhafte, nicht gefundene URL drin (sofern kein Redirect auf die Fehlerseite konfiguriert wurde - dann steht natürlich immer die URL der Fehlerseite drin, was ziemlich langweilig wäre), mit der man mittels Javascript vielleicht einiges machen kann. Was genau das sein könnte, hat Hans ja nicht gesagt.
- Sven Rautenberg
ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|