2009-07-15 4 views
9

Bearbeiten: Was ich wirklich wissen muss, ist, wenn es ein Javascript-Ereignis gibt, das zuverlässig ausgelöst wird, wenn der Benutzer die Seite über die Schaltfläche "Zurück" erreicht. Ich versuchte das onload Ereignis für das body Element, aber es feuert nicht auf Firefox oder Safari.Kann ich erkennen, wenn ein Benutzer mit der Zurück-Taste auf eine Seite gelangt?


ich mit einigen alten Code bin arbeiten, die so schnell durch das Deaktivieren alle Formulareinreichung Tasten Doppel Vorlage von Formulardaten zu verhindern versucht, wenn der Benutzer klickt man (durch auf die Form der onSubmit Ereignis hören). Dieser Code wird auf jedes Formular in der App angewendet, unabhängig davon, ob die doppelte Übergabe ein Problem darstellt.

Das Problem ist, dass, wenn der Benutzer die Zurück-Schaltfläche in Firefox oder Safari drückt, alle Übermittlungsschaltflächen weiterhin deaktiviert sind, wenn er auf die Seite gelangt. In Firefox sind sie sogar nach einer Aktualisierung deaktiviert (nur eine Strg + F5 Aktualisierung wird es tun)!

Ich habe versucht, body 's onLoad Ereignis zu hören, aber FF und Safari feuern nicht, wenn Sie auf die Seite über die Schaltfläche "Zurück" gelangen. (Interessanterweise ist es auf einem weichen Refresh auf FF gefeuert, auch wenn die Taste deaktiviert bleibt.)


Hier ist eine sehr einfache HTML-doc, die zeigen, was ich meine:

<html><body> 
<form name="theForm" id="theForm" action="test2.html" 
     onSubmit="document.theForm.theButton.disabled = true;"> 
    <input id="theButton" type="submit" name="theButton" value="Click me!" /> 
</form> 
</body></html> 

Hinweis: Ich habe auf WinXP mit IE8, FF3.5, Safari 4, Opera 9 und Chrome 2.0 getestet. Nur Safari und FF lassen die Schaltfläche deaktiviert, wenn Sie zurück verwenden, um zu ihnen zu gelangen.

+0

hast du meine Antwort versucht ?? – Eric

+0

ja, ich habe unten einen Kommentar hinzugefügt (sorry, ich machte das bei der Arbeit und es war Zeit nach Hause zu gehen) – Kip

+0

Duplikat von http://StackOverflow.com/Questions/54539/prevent-use-of-the-back- Button-in-ie und viele, viele andere. Suche http://stackoverflow.com/search?q=back+button –

Antwort

1

Ich glaube nicht, dass Sie speziell für die Zurück-Taste testen können, aber ich glaube, dass Sie die Geschichte des Browsers mit Javascript überprüfen können.

+0

Sie können history.current mit history.length vergleichen, aber nur, wenn Ihr Skript vertrauenswürdig ist. – Kev

+0

Es scheint, dass moderne Browser (2012) history.current nicht unterstützen, daher habe ich eine neue Antwort hinzugefügt. – TecBrat

2

Ist das nicht das gewünschte Verhalten, also werden sie nicht mit der Zurück-Schaltfläche doppelt eingereicht?

Wie auch immer, Sie könnten ein Cookie auf der folgenden Seite festlegen und erkennen, dass beim Laden auf der Seite mit dem Formular.

+0

in einigen Fällen ja. Das Problem ist, dass es einseitig auf alle Formulare in unserer App angewendet wird, und in einigen davon ist es für den Benutzer sinnvoll, zurückzugehen und einen anderen Senden-Button zu verwenden, um zu einer anderen Ansicht zu gelangen. (ich habe es nicht entworfen, ich versuche nur, damit zu arbeiten) – Kip

2

Ja. In Javascript können Sie besuch.Wert

function checkrefresh() 
var visited = getCookie("visited"); 
{ 
     if((form.visited.value == '' || form.visited.value == null) && (visited != '1')) 
     { 
      document.form.visited.value = "1"; 
        document.cookie = "visited=1"; 
        //here you set it to something so that next time they go to the page it will no longer be nothing and you can 'disable the button' see below. 

     } 
     else 
     { 
      document.form.submitbutton.disabled=true; 
     } 
    } 

function getCookie(name) 
{ 
var re = new RegExp(name + "=([^;]+)"); 
var value = re.exec(document.cookie); 
return (value != null) ? unescape(value[1]) : null; 
} 

verwenden, würden Sie dies im Onload-Tag FYI nennen.

+0

Das funktioniert definitiv für mich! – Eric

+0

Dies machte es so, dass eine Aktualisierung nach dem Zurückschlagen die Schaltfläche wieder aktivieren würde, aber die Schaltfläche wurde nach dem Zurückschlagen immer noch deaktiviert. Wenn es keine bessere Alternative gibt, muss ich dies möglicherweise als Workaround verwenden. – Kip

+0

ja. Die Aktualisierung setzt den Wert von visited zurück auf 0. – Eric

0

Die Antwort von @tkotitan war wahrscheinlich richtig, als er es schrieb. Seine Antwort führte mich zu meiner Lösung. Es ist nicht ungefährlich, aber es könnte "gut genug" sein, um in manchen Situationen zu helfen.

Ich verbesserte mein Skript und ersetzte es durch das folgende. Diese Version ist für eine Zwischenseite, die jetzt in beiden Richtungen als Zwischenspeicher fungiert.

<?php 
if($_SERVER['QUERY_STRING']=='') 
{ 
    echo '<a href="go_back_test.php?page=1">Go forward</a>'; 
} 
elseif($_GET['page']!=2) 
{ 
    echo 'You cannot stay here.'; 
    echo ' 
    <script type="text/javascript"> 
    function test() 
    { 
     if (document.getElementById("detectback").value=="goneback") 
     { 
      document.getElementById("detectback").value=history.length; 
     } 
     if (document.getElementById("detectback").value==history.length) 
     { 
      document.getElementById("detectback").value="goneforward"; 
      window.location = "go_back_test.php?page=2" 
     } 
     else 
     { 
      document.getElementById("detectback").value="goneback"; 
      window.history.back(); 
     } 
    } 
    function updateform() 
    { 
     if(document.getElementById("detectback").value=="") 
     { 
      document.getElementById("detectback").value=history.length; 
     } 
    } 
    </script> 
    <img src="spacer.gif" onload="updateform(); test();"><br> 
    <form> 
     <input id="detectback" type="text" value="" style="display: none;"> 
    </form> 
    '; 
} 
else 
{ 
    echo 'Welcome to page 2'; 
} 
?> 
Verwandte Themen