2012-02-24 11 views
14

Sto costruendo un'applicazione in un ambiente in cui sono limitato all'utilizzo del file system locale e di un browser (ad esempio, l'esecuzione di un server non è un'opzione). Ho un generico link "torna indietro" su numerose pagine che principalmente chiamano solo history.back(). Sembra qualcosa di simile al seguente:È possibile ottenere la funzione history.back() per funzionare in Chrome quando si utilizza il protocollo file: //?

function goBack(evt) { 
    // Check to see if override is needed here 

    // If no override needed, call history.back() 
    history.back(); 
} 

$('#my-back-button').click(goBack); 

Questo codice funziona bene in Firefox e IE6 (non chiedere), ma non riesce in Chrome. Qualche suggerimento sul perché e/o possibili soluzioni alternative?

Ho anche provato history.go(-1); che non funziona neanche.

+0

fare alcune ricerche di Google sul "posteriore cromato pulsante non funziona" questo potrebbe essere un bug del browser, il codice va bene. Vorrei presentare un rapporto a Google. –

+0

@ MikeL. Grazie per il suggerimento, ma su Google il problema si è rivelato improduttivo. C'è un modo per confermare questo è un bug vero? –

risposta

21

Per qualche ragione in cromo, è necessario aggiungere return false dopo aver chiamato history.go (-1)

Cambia la funzione di:

function goBack(evt) { 
// Check to see if override is needed here 

// If no override needed, call history.back() 
history.go(-1); 
return false; 
} 
+0

Grazie. Ha funzionato. Qualche idea del perché questo potrebbe essere? –

+0

Questo è il modo corretto per farlo, quindi apparentemente Google ti obbliga a farlo nel modo giusto. –

2
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<title>Untitled Document</title> 
</head> 
<body> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
<script> 
$(document).ready(function() { 
    function goBack(evt) { 
    // Check to see if override is needed here 

    // If no override needed, call history.back() 
    history.back(); 
    $('#my-back-button').forwardEvent('click'); 
} 

$('#my-back-button').click(goBack); 

/** 
* chrome workaround for triggering click events 
* @param {event} event event 
* @return {undefined} Returns undefined 
*/ 
    $.fn.forwardEvent = function(event) { 
     this.each(function() { 
      if (this.dispatchEvent) { 
       if (event.originalEvent) { 
        event = event.originalEvent 
       } 
       try { 
        this.dispatchEvent(event); 
       } catch(error) { 
        $(this).trigger(event); 
       } 
      } 
      else { 
       $(this).trigger(event); 
      } 
     }); 
     return this; 
    }; 
}); 
</script> 
<input type="button" value="<<<<" id="my-back-button"> 
</body> 
</html> 
+0

Hmmm. Mi dispiace ma sembra solo creare una ricorsione infinita. Il problema non è il $ ('# my-back-button') che non riceve l'evento click, ma piuttosto che history.back() non fa nulla. –

+0

Beh, l'ho provato in cromo contro il tuo codice originale, e funziona. Con il protocollo "file: ///" ecc. Non ha funzionato per te? – heliogabal

+0

Ok, qui manca l'epico, perché funziona comunque per me, senza inoltro di eventi ... Potresti incollare il codice esatto della pagina usato per i test? Spogliato da cose inutili, naturalmente, minimo indispensabile. – heliogabal

0

Per Chrome utilizzare al di sotto di codice:

<a href="#" onclick="javascript:history.go(-1);return false;" style="text-decoration:underline;">Back</a> 

Solo questo codice funzionerà ..

Spero che possa essere d'aiuto ... Felice codifica .. :)

+0

In generale, l'uso di "onclick" (e simili) per impostare i gestori di eventi è considerato una cattiva pratica. Vedi: http://stackoverflow.com/questions/5871640/why-is-using-onclick-in-html-a-bad-practice, per ulteriori informazioni. –

0

var referrer = document.referrer; window.location.replace (referrer);

Utilizzare questo funzionerà

Problemi correlati