Domanda

Sto scrivendo un'applicazione che, se l'utente torna a colpire, si può inviare nuovamente le stesse informazioni e rovinare il flusso e l'integrità dei dati.Come faccio a disattivarlo per gli utenti che sono con e senza javascript?

È stato utile?

Soluzione

Non è possibile, purtroppo.Tuttavia, prendere in considerazione le applicazioni modello di navigazione.Stai usando Post/Redirect/Ottenere PRG Modello? http://en.wikipedia.org/wiki/Post/Redirect/Get?

Questo modello è più pulsante indietro rispetto il Postback modello.

Altri suggerimenti

Non si dovrebbe.

Si potrebbe fissare alcuni script per l'evento onbeforeunload di una pagina e confermare con l'utente, che è quello che voglio fare;e si può andare un po ' oltre e provare per disattivare ma, naturalmente, che funziona solo per gli utenti che hanno attivato javascript.Invece guarda la riscrittura dell'applicazione in modo che non si impegnano operazioni su ogni pagina di invio, ma solo alla fine del processo.

Vi esorto vivamente di andare a eroico lunghezze per evitare di rompere il pulsante indietro, è un modo sicuro fuoco per allontanare gli utenti e anche fatto per N. 1 su Jacob Neilsen Top 10 Web Design Errori nel 1999.

Forse si potrebbe prendere in considerazione invece di porre la domanda:"Come evitare di rompere il pulsante indietro per <insert your="" scenario="" here="">?"

Se Scott risposta colpisce vicino al marchio, si consiglia di modificare il flusso al PRG modello.Se è qualcos'altro, poi dare un po ' più nel dettaglio e vediamo come possiamo aiutarti.

Mi si avvicinò con un piccolo hack che consente di disattivare il pulsante indietro utilizzando JavaScript.Ho controllato su google chrome 10, firefox 3.6 e IE9:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<title>Untitled Page</title>
<script type = "text/javascript" >
function changeHashOnLoad() {
     window.location.href += "#";
     setTimeout("changeHashAgain()", "50"); 
}

function changeHashAgain() {
  window.location.href += "1";
}

var storedHash = window.location.hash;
window.setInterval(function () {
    if (window.location.hash != storedHash) {
         window.location.hash = storedHash;
    }
}, 50);


</script>
</head>
<body onload="changeHashOnLoad(); ">
Try to hit back!
</body>
</html>

L'opzione migliore è di non dipendere da postback per il controllo di flusso, tuttavia, se si è bloccato con esso (per ora)

si può usare qualcosa come questo:

  Response.Cache.SetCacheability(HttpCacheability.NoCache);
  Response.Cache.SetExpires(Now.AddSeconds(-1));
  Response.Cache.SetNoStore();
  Response.AppendHeader("Pragma", "no-cache");

Presto vi accorgerete che non funziona su tutti i browser, ma poi si può introdurre un controllo nel codice come:

 if (Page.IsPostBack)
 {
        if (pageIsExpired()){
           Response.Redirect("/Some_error_page.htm");
        }
        else {
           var now = Now;
           Session("TimeStamp") = now.ToString();
           ViewState("TimeStamp") = now.ToString();
        }

  private boolean pageIsExpired()
  {
     if (Session("TimeStamp") == null || ViewState("TimeStamp") == null)
        return false;

     if (Session("TimeStamp") == ViewState("TimeStamp"))
        return true;

        return false;
  }

Che risolverà il problema in un certo senso, il Codice non controllato -- solo per esempi scopi..

È possibile disattivare il pulsante indietro in tutti i principali browser.Che utilizza solo i valori hash per disattivare il pulsante indietro completamente.Basta mettere queste 5 righe di codice nella vostra pagina

 <script>
window.location.hash="no-back-button";
window.location.hash="Again-no-back-button";//for google chrome
window.onhashchange=function(){window.location.hash="no-back-button";}
</script> 

Descrizione dettagliata

Ecco un post precedente su di esso:Evitare di Utilizzare il Pulsante Indietro (in IE)

Qualsiasi cosa voi per disattivare il pulsante indietro potrebbe non interrompere il pulsante indietro del browser futuro.

Se la fine del ciclo di sviluppo ti suggerisco di provare alcuni dei suggerimenti di cui sopra, ma quando si ottiene il tempo si dovrebbe strutturare il flusso in modo che il pulsante indietro non interferire con la logica del tuo sito, basta semplicemente l'utente torna alla pagina precedente come si aspettano che faccia.

È vero, la corretta convalida deve essere aggiunto per assicurarsi che i dati duplicati non complicare le cose.Tuttavia, come nel mio caso, non ho il pieno controllo dei dati dal momento che sto usando alcune API di terze parti, dopo il mio stato di forma.Così ho usato questo

history.go(+1);

Questo invierà utente verso una "ricevuta" che dovrebbe venire dopo "pagamento" pagina se si tenta di tornare a "pagamento" della pagina (solo dando un pagamento per esempio).Usare con parsimonia, anche se

Si potrebbe postare i dati su ogni modulo per un _NEW finestra.In questo modo si disattiva il pulsante indietro su ogni finestra, ma senza il javascript potrebbe essere difficile per forza il vecchio ha chiuso.

4 Ragazzi Rolla ha scritto questo articolo su come disabilitare il pulsante indietro tempo fa (in una galassia lontana lontana): http://www.4guysfromrolla.com/webtech/111500-1.shtml

Sono stato in grado di realizzare questo utilizzando:

 Response.Cache.SetExpires(DateTime.MinValue);
 Response.Cache.SetNoStore();

Quando ho usato la Risposta.Cache.SetCacheability(HttpCacheability.NoCache);non mi ha impedito di scaricare i file di office.

Trovate di seguito i link

Disabilitare il tasto back del browser la funzionalità di utilizzo di JavaScript asp.net | ASP.Net disabilitare il tasto back del browser (tramite javascript)

http://www.aspdotnet-suresh.com/2011/11/disable-browser-back-button.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top