Kiska Kogtistaya: Offline 404-Fehler abfangen

Hallo,

ich habe folgendes Problem:

Ich arbeite mit einer SEHR umfangreichen Homepage, die einer Datenbank ähnelt. Ich muss aber diese in JS gestalten, da sie nur offline und auf verschiedenen Systemen laufen muss (Internetzugang, lokale Webserver und Installation von Fremdsoftware ausgeschlossen!).

Die Seite besteht aus .html-Dateien, die durchnummeriert sind. Zu jeder „Nummer“ gibt's verschiedene Unterpunkte, die nach dem selben Prinzip durchnummeriert sind. Hier lese ich mit JavaScript die Dateinamen aus und generiere den Link (no problem :)!).

Das Problem ist, dass es die Unterpunkte bei weitem nicht überall gibt, da ich aber mit Templates arbeite, existieren also mehr als genug Links, die auf nicht vorhandenen Seiten zeigen.

Frage, wie löse ich das Problem, ohne manuell die fehlenden Seiten als eine Standard-Error-Seite abzuspeichern? Ich kann wohl keine 404-Fehler mit clientseitiger JS-Lösung abfangen. Gibt's da vielleicht ein Trick? Gerne auch NICHT JS-Lösung!

Danke im voraus

  1. Moin!

    Frage, wie löse ich das Problem, ohne manuell die fehlenden Seiten als eine Standard-Error-Seite abzuspeichern? Ich kann wohl keine 404-Fehler mit clientseitiger JS-Lösung abfangen. Gibt's da vielleicht ein Trick? Gerne auch NICHT JS-Lösung!

    Javascript kann dir garnicht helfen, weil es a) nicht mit Servern kommunizieren kann und b) nicht mit dem Dateisystem des Clientrechners.

    Bleibt also nur, die fehlenden Seiten mit einer Standardseite Marke "404" auszufüllen. Wobei diese entsprechend häufig dupliziert werden muß, denn Redirects gibts offline natürlich auch nicht. Halt, doch: Meta-Refresh sollte funktionieren, ich bin mir aber nicht 100% sicher, ob in allen Browsern. Lies dazu SelfHTML.

    Trotzdem: Ob du nun die 404-Seite duplizierst, oder die Refresh-Seite, die auf eine zentrale 404-Seite verweist: Die Arbeit mit nichtexistierenden Dateinamen hast du so und so.

    Ansonsten würde ich ernsthaft darüber nachdenken, die Links manuell nachzubearbeiten, so daß die Notwendigkeit für 404 einfach enrfällt - Template hin oder her, alles andere sieht einfach unprofessionell aus. Vielleicht wäre es ja eine Idee, die Seiten von einem Serverskript erstellen zu lassen und dann offline als feste HTML-Datei abzulegen.

    - Sven Rautenberg

    1. Moin!

      Moin auch :)

      Javascript kann dir garnicht helfen, weil es a) nicht mit Servern kommunizieren kann und b) nicht mit dem Dateisystem des Clientrechners.

      weiß ich ja... funke Hoffnung bestand aber

      Bleibt also nur, die fehlenden Seiten mit einer Standardseite Marke "404" auszufüllen. Wobei diese entsprechend häufig dupliziert werden muß, denn Redirects gibts offline natürlich auch nicht. Halt, doch: Meta-Refresh sollte funktionieren, ich bin mir aber nicht 100% sicher, ob in allen Browsern. Lies dazu SelfHTML.

      meta-refresh funzt schon, aber diese müsste ich dann in die Standard 404-Seite einbauen. Oder?
      Jetzt ist mir beim Schreiben die Idee gekommen... Wenn ich die entsprechende Seite in einen Frame runterlade, kann ich dann über die globale Funktion auf die location.href zugreifen //top.main.usw. und die nach Vorhandensein von '404' untersuchen. In diesem Fall müsste die Seite mit Standard-Seite erstetzt werden. Müsste man dann voraussetzen, dass der Dateiname den String '404' beinhaltet. Muss ausprobieren...

      Trotzdem: Ob du nun die 404-Seite duplizierst, oder die Refresh-Seite, die auf eine zentrale 404-Seite verweist: Die Arbeit mit nichtexistierenden Dateinamen hast du so und so.

      habe ich nicht! und wenn ich ich so lasse. Es sind über 2000 Dateien, die sich ständig verändern, da kann man leicht wahnsinnig werden.

      Ansonsten würde ich ernsthaft darüber nachdenken, die Links manuell nachzubearbeiten, so daß die Notwendigkeit für 404 einfach enrfällt - Template hin oder her, alles andere sieht einfach unprofessionell aus. Vielleicht wäre es ja eine Idee, die Seiten von einem Serverskript erstellen zu lassen und dann offline als feste HTML-Datei abzulegen.

      Das ist eine klasse Idee. Im Ernst... Danke!!

      1. Moin!
        Moin auch :)

        Hallo ihr zwei,

        Jetzt ist mir beim Schreiben die Idee gekommen... Wenn ich die entsprechende Seite in einen Frame runterlade, kann ich dann über die globale Funktion auf die location.href zugreifen //top.main.usw. und die nach Vorhandensein von '404' untersuchen. In diesem Fall müsste die Seite mit Standard-Seite erstetzt werden. Müsste man dann voraussetzen, dass der Dateiname den String '404' beinhaltet. Muss ausprobieren...

        das ist browserabhängig, im Netscape 4 würde man erst noch einen
        schönen fetten alert mit dem Hinweis "Netscape kann die Datei oder das Verzeichnis mit dem Namen ... nicht finden. Überprüfen Sie den Namen und versuchen Sie es erneut." bekommen,
        im IE dagegen kann man die potentielle Webseite unbemerkt in einen
        Frame mit Höhe oder Breite 0 laden und dann abfragen
        if((parent.TestFrame.document.images[0])&&
           (parent.TestFrame.document.images[0].src=="pagerror.gif"))

        Lutz.

        1. im IE dagegen kann man die potentielle Webseite unbemerkt in einen
          Frame mit Höhe oder Breite 0 laden und dann abfragen
          if((parent.TestFrame.document.images[0])&&
             (parent.TestFrame.document.images[0].src=="pagerror.gif"))

          Klingt richtig gut (fast nach der Lösung, die ich suche :)). Muss ich noch ausprobieren. Vielen Dank!

  2. Hallo Kiska,

    ich würde mir in einer js-Datei die Namen aller vorhandenen HTML-Dateien speichern (dazu könnte man ein kleines Programm schreiben, welches die js-Datei automatisch erzeugt), die js-Datei dann in den Header jeder Datei von der ein Aufruf erfolgen könnte einfügen und bei den Links
    href="#" onclick="Check('datei1'); return(true)"
    anstelle von href="datei1.html" verwenden

    function Check(fn)
    { if (fn) window.location.href=fn+".html";
    }

    In die JS-Datei einfügen:
    datei1=1;
    datei2=1;
    datei3=1;

    usw., falls die Dateien in unterschiedlichen Verzeichnissen sind, muß man die Sache noch etwas umprogrammieren, aber ich denke das kriegst Du schon allein hin.

    Gruß Lutz.

    1. Hallo Lutz,

      ich würde mir in einer js-Datei die Namen aller vorhandenen HTML-Dateien speichern (dazu könnte man ein kleines Programm schreiben, welches die js-Datei automatisch erzeugt

      Die Dateinamen kann ich nicht automatisch erzeugen, weil es bei den fehlenden Links kein System gibt. Müsste dann trotzdem schauen, welche da sind und welche nicht. Es sind etwas über 2000, ansonsten hätte ich nicht hier in Forum gepostet, sondern brav alles per Hand gemacht.

      Die .js-Dateien habe ich noch nie automatisch erzeugt. Geht das überhaupt???

      Aber die Idee ist im Prizip nicht schlecht. Ich würde es über Array versuchen. Es wird aber ein SEHR langer Array :)

      Vielen Dank

  3. Hi Kiska

    Ich muss aber diese in JS gestalten, da sie nur offline und auf
    verschiedenen Systemen laufen muss (Internetzugang, lokale Webserver
    und Installation von Fremdsoftware ausgeschlossen!).

    Aha. Dein mitgelieferter JavaScript-Code ist also keine "Fremdsoftware"?
    (Auch dann nicht, wenn sie vom M$IE interpretiert wird, der ggf. mit der
    sand box nicht beliebig korrekt umgeht?)

    Die Seite besteht aus .html-Dateien, die durchnummeriert sind.
    Zu jeder „Nummer“ gibt's verschiedene Unterpunkte, die nach dem
    selben Prinzip durchnummeriert sind. Hier lese ich mit JavaScript
    die Dateinamen aus und generiere den Link (no problem :)!).

    Wie auch schon Sven meinte: Du wirst mit dynamischen Links nicht
    glücklich werden.
    Mache alles in statischem HTML - aber lasse Dir dieses generieren!
    Mit Templates bist Du ja eh schon auf der richtigen Schiene.

    Wenn Du nämlich ausschlielßlich statische Links verwendest, dann kannst
    Du Deine Seiten mal schnell über einen lokalen Webserver ansprechbar
    machen und mit einem handelsüblichen links checker drüber fahren.
    Der findet garantiert jeden broken link. Ich mache so etwas jedes Mal,
    bevor ich irgendwelche nennenswerten Änderungen auf meine Homepage lade;
    1500 Dokumente prüfen dauert eine Minute, die Zeit ist mir das wert.

    Das Problem ist, dass es die Unterpunkte bei weitem nicht überall
    gibt, da ich aber mit Templates arbeite, existieren also mehr als
    genug Links, die auf nicht vorhandenen Seiten zeigen.

    Wenn Du die Links statisch generierst, dann kann Dein Generator zu diesem
    Zeitpunkt prima prüfen, welche Ziel-Dokumente es gibt und welche nicht.

    Frage, wie löse ich das Problem, ohne manuell die fehlenden Seiten
    als eine Standard-Error-Seite abzuspeichern?

    Indem Du gar nicht erst Links darauf generierst, beispielsweise.

    Ich kann wohl keine 404-Fehler mit clientseitiger JS-Lösung abfangen.
    Gibt's da vielleicht ein Trick? Gerne auch NICHT JS-Lösung!

    Wenn Du alles außer JavaScript in der "Produktionsumgebung" gemäß
    Aufgabenstellung ausgeschlossen hast, bleibt Dir nur, korrekte Seiten
    ohne broken links zu bauen.
    Mit entsprechender Infrastruktur ist das nicht schwer, solange Du nur
    statische Links hast. (Wobei ich nicht ausschließe, daß Dein JavaScript-
    Code dynamisch zwischen ihnen umschaltet!)

    Viele Grüße
          Michael