none
Back Button in Javascript code funktioniert nicht bei IE8

    Question

  • Ich habe Testcode für eine Webseitenerstellung (Formular eingeben, abschicken, neue Daten) erstellt (siehe unten). Aufgabe: Nach der Eingabe werden die Daten per Knopfdruck an den Server geschickt (submit), optional gedruckt (drucken) und für den nächsten Datensatz vorbereitet (neue Daten). Der Code funktioniert bei Firefox, nicht aber bei IE8 (unter Windows 7). Das Problem ist, dass der Back button nicht auf die richtige Seite zurückführt, sondern auf eine Seite davor. Wie gesagt, bei Firefox funktioniert der Code. Was muss ich ändern, damit der Code auch bei IE8 funktioniert?

    hier die php-datei:

    <?php
    $message  = 'Registration für ' . "\r\n" .
                'DataOK      : ' . $_POST['DataOK'] . "\r\n" .
                'Submit      : ' . $_POST['Submit'] . "\r\n" .
                'Neue Daten  : ' . $_POST['NeuDat'] . "\r\n" .
                'Reset       : ' . $_POST['Reset'] ;
                                    
    $header = 'From: cmk@mpp.mpg.de' . "\r\n" .
              'Reply-To: cmk@mpp.mpg.de';
    $empfang = 'cmk@mpp.mpg.de' ;
    $betreff = 'Registration ' . $_POST['DataOK'] ;
    mail($empfang, $betreff, $message, $header);
    ?>
    <html><body>
    <center>

    <font face="Arial" size="5">
    Vielen Dank, <br><br>
    Ihre Daten wurden übermittelt<br>
    </font>

    <FORM><INPUT TYPE="BUTTON" VALUE="Go Back"
    ONCLICK="history.back()"></FORM>

    </center>
    </body>
    </html>

     

    hierzu der entsprechende html code, der im IE8 oder Firefox geöffnet wird:

    <html><script type=text/javascript>
    function chkFormular()
    {
     document.Anmeldung.Submit.disabled=true ;
     document.Anmeldung.NeuDat.disabled=true ; 
     document.Anmeldung.DruckDat.disabled=false ;
     return true ;
    }
    </script>

    <script type=text/javascript>
    function DruckeDaten()
    {
     document.Anmeldung.Submit.disabled=true ;
     document.Anmeldung.DruckDat.disabled=true ;  
     document.Anmeldung.NeuDat.disabled=false ; 
     focus();
     if (window.print) {
     jetztdrucken = confirm('Seite drucken ?');
     if (jetztdrucken) window.print();
        } 
     return true ;
    }
    </script>


    <script type=text/javascript>
    function NeueDaten()
    {
     document.Anmeldung.DataOK.checked=false ;
     document.Anmeldung.DruckDat.disabled=true ;
     document.Anmeldung.Submit.disabled=false ;
     document.Anmeldung.NeuDat.disabled=true ;
     return true ;
    }
    </script>

    <body lang=DE style='tab-interval:36.0pt'>

    <form action="mailmantest.php" 
     method="post" name="Anmeldung" onsubmit="return chkFormular()">


    <table border="0" width="95%">
       <tbody>
       <tr>
      <table border="0" width="95%">
         <tbody>
      
       <tr>
        <td height="2" nowrap="nowrap" colspan="4" align="left" valign=top><input type=checkbox name="DataOK" >
        <font face="Arial" style="font-size: 10pt">
        Ich habe die oben eingegebenen Daten auf ihre Richtigkeit überprüft </td>
       </tr>
      
       </tbody>
      </table>
     </tr>
     
     
     <tr>   
      <table border="0" width="95%">
       <tbody>
       <tr><td colspan="4">&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td>
       </tr>
         
          <tr>                      
        <br>
           <td height="2" nowrap="nowrap" width="200" align="left">
        <input type="submit" value="Abschicken" name="Submit"></td>
        
        <td height="2" nowrap="nowrap" width="200" align="left">
        <input disabled type="button" value="Drucke Daten" name="DruckDat" onclick="return DruckeDaten()">
        </td>

        <td height="2" nowrap="nowrap" width="200" align="left">
        <input disabled type="button" value="neue Daten" name="NeuDat" onclick="return NeueDaten()">
        </td>
      
        <td height="2" nowrap="nowrap" width="250" align="left">
        <input type="reset" value="alle Einträge löschen" name="Reset">
        </td>
          </tr>
          </tbody>
         </table>
        </tr>
      
     </tbody>
    </table>
     
    </form>

    </body>

    </html>

     

    Sunday, January 09, 2011 11:06 AM

Answers

  • Meine
    Annahme, dass die Anweisung "history.back()" den Status des Fensters
    wieder etabliert, der VOR dem Drücken von "Abschicken" bestand (also Daten
    auf der Seite verändert wurden) ist offensichtlich nicht mit den
    allgemeinen Konventionen vereinbar.

    Doch. Bei einem normalen Zurückgehen per history.back() werden sehr wohl die
    eingegebenen Daten angezeigt, da die Seite nicht erneut beim Server abgefragt
    wird (außer es handelt sich schon in diesem Stadium um das Ergebnis eines
    POST). Daß das bei dir anders ist, liegt an der Programmierung. Woran genau,
    kann ich nicht erkennen, weil ich, wie gesagt, den Arbeitsfluß nicht
    nachvollziehen kann. Wenn ich auf die gepostete URL gehe und dann die
    beschriebenen Aktionen durchführe, erhalte ich keine Seite mit einem "Go
    Back"-Button, sondern irgendwas mit "weiter".
    Wie ich gerade sehe, hast du da was geändert und der Button wird nun
    angezeigt, womit auch der Arbeitsfluß nachvollziehbar ist. Und jetzt ist auch
    erkennbar, wo dein eigentlicher Irrtum liegt. Natürlich wird der Javascript-
    Code in der Seite ausgeführt und demnach stehst du wieder am Anfang.
    Eingegebene Daten würden durchaus erhalten bleiben, aber das hast du ja gar
    nicht getestet. Du hast nur getestet, daß/ob das Javascript irgendwelche
    Buttons inaktiviert. Das Verhalten des Firefox in dieser Situation ist m.E.
    ein schwerer Fehler im Programm. Er geht auch keineswegs in der History
    zurück, denn die Seite, die jetzt angezeigt wird, war so (mit aktiviertem
    Button "neue Daten") noch nie im Browser zu sehen.
    Wie gesagt, du mußt das völlig anders lösen, am einfachsten und gleichzeitig
    robustesten wie beschrieben mit einer Session.


    IEFAQ: http://iefaq.info
    Wednesday, January 12, 2011 12:30 PM

All replies

  • Der Code in dieser Form wird im Quirks-Mode ausgeführt, da er nicht
    validieren würde. Validiere den Code erstmal und stelle so sicher, daß er
    im IE8 Standards Mode ausgeführt wird, überprüfe mithilfe der Developer
    Tools. Wenn das das Problem nicht schon löst, stelle deine neuen Seiten
    dann mal unter einer URL zum Testen zur Verfügung.


    IEFAQ: http://iefaq.info
    Sunday, January 09, 2011 3:31 PM
  • Hallo,

    ich bin neu in den Foren und hatte eine Frage zu einem Javascript-Problem ("history.back()") in einer Anwendung (Formularausfüllen im IE8) gestellt (hier: http://social.msdn.microsoft.com/Forums/de-DE/internet_explorerde/thread/f82bfd63-691a-4921-aa50-3e6785039a68/).

    Bisher hat sich kein Experte dazu geäußert. Ist das Forum das richtige für mein Anliegen (es geht darum, dass "history.back()" im IE8 nicht geht, hingegen im Firefox funktioniert). Für Hilfe wäre ich sehr dankar, da ich eine Formularentwicklung auch für IE8-Nutzer hinkreigen möchte.

    Besten Dank

    Monday, January 10, 2011 10:16 AM
  • Hallo chmk,

    Das Forum hier ist schon das richtige. Hast Du die Antwort von Kai Schätzl schon gelesen?

    Grüße,

    Robert

    Monday, January 10, 2011 10:36 AM
  • Hallo Kai,

     

    vielen Dank für die Antwort (habe sie leider erst jetzt auf Hinweis von Robert Breitenhofer entdeckt). Mir ist leider nicht klar, was ich tun muss, damit ich den code "validiere". Auch "Quirks" und "Standards mode" sind mir nicht geläufig. Sorry für mein Ignoranz. ein Hinweis hier würde mir sehr helfen.

    Viele Grüße

    Christian

     

    Monday, January 10, 2011 12:47 PM
  • Validieren: http://validator.w3.org/
    Bezüglich des "Zweier-Sprungs" rückwärts, schau doch mal in dem sog.
    Travellog (Zurück-Button, Pfeil nach unten), ob sich das dort
    nachvollziehen läßt (d.h. wird dort als letzte URL die URL angezeigt, zu
    der du auch tatsächlich zurückgelangst?). Weiterhin ist nicht klar, ob das
    Verhalten über den Zurück-Button genauso ist.


    IEFAQ: http://iefaq.info
    Monday, January 10, 2011 1:53 PM
  • Hallo Kai,

    also, die Validierung (bez. die Hinweise des Validators) übersteigen leider meine Kenntnisse von HTML (bin Anfänger, sorry). Ich habe zumindest die doctypes und meta eingeschlossen (abgespickt), aber das hat nicht geholfen. Dafür sind meine Umlaute in einem von mir erzeugten pop-up Fenster verschwunden. 

    Der URL ist www.aelas.org/Meldeschein.htm abrufbar. Der code ist (bis auf die doctypes und meta) mit dem oben identisch. Der mailmantest.php befindet sich auch unter dem Verzeichnis (www.aelas.org/mailmantest.php).

    Es bleibt der Befund, dass der Code (Back -button) unter Firefox läuft, nicht aber unter dem IE8.

    Sorry, aber das Debuggen des Problems ist für mich mindestens eine Stufe über meinem Anfängerwissen ...

    Viele Grüße

    Christian 

    Monday, January 10, 2011 10:49 PM
  • Hallo Kai,

    also, die Validierung (bez. die Hinweise des Validators) übersteigen leider meine Kenntnisse von HTML (bin Anfänger, sorry). Ich habe zumindest die doctypes und meta eingeschlossen (abgespickt), aber das hat nicht geholfen. Dafür sind meine Umlaute in einem von mir erzeugten pop-up Fenster verschwunden. 

    Der URL ist www.aelas.org/Meldeschein.htm abrufbar. Der code ist (bis auf die doctypes und meta) mit dem oben identisch. Der mailmantest.php befindet sich auch unter dem Verzeichnis (www.aelas.org/mailmantest.php).

    Es bleibt der Befund, dass der Code (Back -button) unter Firefox läuft, nicht aber unter dem IE8.

    Sorry, aber das Debuggen des Problems ist für mich mindestens eine Stufe über meinem Anfängerwissen ...

    Viele Grüße

    Christian 

    sorry, der URL ist www.aelas.org/Meldetest.htm

     

    Monday, January 10, 2011 10:51 PM
  • Validieren: http://validator.w3.org/
    Bezüglich des "Zweier-Sprungs" rückwärts, schau doch mal in dem sog.
    Travellog (Zurück-Button, Pfeil nach unten), ob sich das dort
    nachvollziehen läßt (d.h. wird dort als letzte URL die URL angezeigt, zu
    der du auch tatsächlich zurückgelangst?). Weiterhin ist nicht klar, ob das
    Verhalten über den Zurück-Button genauso ist.


    IEFAQ: http://iefaq.info

    ich sollte die "zurück-Aktion" präzisieren: das HTM enthält 3 buttons, die nacheinander auf der selben Seite aktiviert werden: zunächst ein "drucken" button (überprüfen der Daten muss zuvor angehakt werden). Dieser button aktiviert den "abschicken" button ("drucken" wird deaktiviert). Der "Abschicken" button verschickt über php eine email und quittiert mit einem popup, dass die Daten übertragen wurden. Auf diesem popup befindet sich der besagte "Zurück-Button" ("history.back()"). Beim IE8 wird nach Drücken dieses Buttons aber der Zustand des Fensters VOR dem Drücken des "Abschicken"-Buttons angezeigt, nicht aber NACH dem Drücken (was gewollt ist wegen der folgenden Aktion: "Neue Daten", dieser Button sollte dann aktiviert seint). Dies läuft richtig beim Firefox. Also muss es irgendwo eine für mich nicht erkennbare Konvention (Code) geben, die das auch beim IE8 richtig macht.   
    Tuesday, January 11, 2011 7:47 AM
  • Der
    "Abschicken" button verschickt über php eine email und quittiert mit einem
    popup, dass die Daten übertragen wurden. Auf diesem popup befindet sich
    der besagte "Zurück-Button" ("history.back()").

    Hier liegt wohl schon dein erster Fehler. Ich bekomme kein Popup. Weder im
    IE, noch im FF. Der zweite Fehler liegt hier dann wohl in der Annahme, daß
    das Zurückgehen in einem anderen Fenster nicht nur die Seite, sondern auch
    die eingegebenen Daten anzeigen sollte. Diese Annahme ist falsch und es
    wundert mich, daß der FF das tatsächlich tun sollte. Das neue Fenster hat
    eigentlich auch überhaupt kein Travellog, wohin es zurückgehen könnte. In
    jedem Fall wird es nicht die eingetippten Daten aus einem anderen Fenster
    anzeigen. Wozu da überhaupt ein neues Fenster nötig ist, ist unklar, es macht
    hier keinen Sinn.
    Ich denke, dein Ansatz ist grundsätzlich falsch. Man benutzt dazu
    normalerweise eine Datei auf dem Server, in der sämtlicher PHP- und
    Ausgabe-Code (HTML) und eine Steuerungslogik enthalten ist und benutzt eine
    Session um Daten zu erhalten und für eine erneute Benutzung weiterzuführen.
    Vielleicht hilft dir das Forum unter http://forum.de.selfhtml.org/ weiter,
    das ist besonders auch für Anfänger geeignet.


    IEFAQ: http://iefaq.info
    Tuesday, January 11, 2011 4:42 PM
  • Hallo Kai,

    danke für die Analyse. Der Ausdruck "popup" ist von mir sicher irreführend gewählt. Ich meinte damit, dass das Fenster durch den Text "Danke ..." überschrieben wird. Das wird sowohl im IE als auch im FF so ausgeführt. Der Unterschied liegt aber genau in dem Detail, das Du schilderst: Meine Annahme, dass die Anweisung "history.back()" den Status des Fensters wieder etabliert, der VOR dem Drücken von "Abschicken" bestand (also Daten auf der Seite verändert wurden) ist offensichtlich nicht mit den allgemeinen Konventionen vereinbar. Warum es beim FF dennoch funktioniert ist vielleicht eine komfortable Variante des Cashing der Seite, die jede Veränderung AUF der Seite als neuen Status und damit als "neue" Seite festhält. Der FF (und NUR der FF) geht mit history.back() scheinbar auf den LETZTEN Status der Seite zurück, während IE8 (und auch Google Chrome) den ERSTEN Status der Seite zeigen.

    Ich werde also den Aufbau des Codes überdenken und eine Codierung suchen, die nicht auf der Annahme aufbaut, dass die Änderungen der Seite automatisch in den Cashe wandern.

    Vielen Dank

    Christian      

       

    Tuesday, January 11, 2011 10:48 PM
  • Meine
    Annahme, dass die Anweisung "history.back()" den Status des Fensters
    wieder etabliert, der VOR dem Drücken von "Abschicken" bestand (also Daten
    auf der Seite verändert wurden) ist offensichtlich nicht mit den
    allgemeinen Konventionen vereinbar.

    Doch. Bei einem normalen Zurückgehen per history.back() werden sehr wohl die
    eingegebenen Daten angezeigt, da die Seite nicht erneut beim Server abgefragt
    wird (außer es handelt sich schon in diesem Stadium um das Ergebnis eines
    POST). Daß das bei dir anders ist, liegt an der Programmierung. Woran genau,
    kann ich nicht erkennen, weil ich, wie gesagt, den Arbeitsfluß nicht
    nachvollziehen kann. Wenn ich auf die gepostete URL gehe und dann die
    beschriebenen Aktionen durchführe, erhalte ich keine Seite mit einem "Go
    Back"-Button, sondern irgendwas mit "weiter".
    Wie ich gerade sehe, hast du da was geändert und der Button wird nun
    angezeigt, womit auch der Arbeitsfluß nachvollziehbar ist. Und jetzt ist auch
    erkennbar, wo dein eigentlicher Irrtum liegt. Natürlich wird der Javascript-
    Code in der Seite ausgeführt und demnach stehst du wieder am Anfang.
    Eingegebene Daten würden durchaus erhalten bleiben, aber das hast du ja gar
    nicht getestet. Du hast nur getestet, daß/ob das Javascript irgendwelche
    Buttons inaktiviert. Das Verhalten des Firefox in dieser Situation ist m.E.
    ein schwerer Fehler im Programm. Er geht auch keineswegs in der History
    zurück, denn die Seite, die jetzt angezeigt wird, war so (mit aktiviertem
    Button "neue Daten") noch nie im Browser zu sehen.
    Wie gesagt, du mußt das völlig anders lösen, am einfachsten und gleichzeitig
    robustesten wie beschrieben mit einer Session.


    IEFAQ: http://iefaq.info
    Wednesday, January 12, 2011 12:30 PM