2012-02-24 11 views
14

Buduję aplikację w środowisku, w którym jestem ograniczony do korzystania z lokalnego systemu plików i przeglądarki (np. Uruchamianie serwera nie jest opcją). Mam ogólny link "wróć" na wielu stronach, które głównie wywołują tylko history.back(). Wygląda to mniej więcej tak:Czy mogę uzyskać funkcję history.back() do pracy w przeglądarce Chrome przy użyciu protokołu 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); 

Ten kod działa poprawnie w przeglądarkach Firefox i IE6 (nie pytaj), ale kończy się niepowodzeniem w przeglądarce Chrome. Wszelkie sugestie, dlaczego i/lub możliwe rozwiązania?

Próbowałem również history.go(-1);, który również nie działa.

+0

Czy jakieś wyszukiwania Google na „chrom przycisk nie działa wstecz” może to być błąd przeglądarki, kod jest w porządku. Przesyłam raport w Google. –

+0

@MikeL. Dzięki za wskazówkę, ale Google to okazało się nieproduktywne. Czy istnieje sposób potwierdzenia, że ​​jest to prawdziwy błąd? –

Odpowiedz

21

Z jakiegoś powodu w Chrome, trzeba dodać return false po wywołaniu history.go (-1)

Zmień swoją funkcję:

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

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

Dziękuję. To się udało. Jakiś pomysł, dlaczego to może być? –

+0

To jest właściwy sposób, aby to zrobić, więc widocznie Google zmusza Cię do zrobienia tego we właściwy sposób. –

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. Przykro mi, ale to wydaje się tworzyć nieskończoną rekursję. Problemem nie jest $ ('# my-back-button'), który nie otrzymuje zdarzenia kliknięcia, ale raczej to, że history.back() nic nie robi. –

+0

Cóż, testowałem go w chrome vs. Twój oryginalny kod i działa. Z protokołem "file: ///" itp. Nie działa dla Ciebie? – heliogabal

+0

OK, epickiej awarii tutaj, bo to działa dla mnie mimo to, bez przekazywania zdarzeń ... Czy możesz wkleić dokładny kod strony używanej do testowania? Pozbawiony niepotrzebnych rzeczy, oczywiście minimum. – heliogabal

0

Dla Chrome skorzystać z poniższego kodu:

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

Tylko ten kod zadziała ..

Mam nadzieję, że to pomoże ... Szczęśliwe kodowanie .. :)

+0

Ogólnie rzecz biorąc, używanie "onclick" (i podobnych) do ustawiania procedur obsługi zdarzeń jest uważane za złą praktykę. Zobacz: http://stackoverflow.com/questions/5871640/why-is-using-onclick-in-html-a-bad-practice, aby uzyskać więcej informacji. –

0

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

Funkcja ta będzie działać

Powiązane problemy