2009-12-09 4 views
13

Ich bin mitVerwendung von Javascript history.back() schlägt in Safari .. Wie mache ich es Cross-Browser?

<a href="index.php" onclick="history.back();return false;">Back</a> 

eine Rückkehr zur vorherigen Seite Link zur Verfügung zu stellen. Es funktioniert gut unter Windows (IE/Mozilla), schlägt aber in Safari unter Windows/Mac fehl.

Gibt es eine Möglichkeit, damit es auf allen Systemen/Browsern funktioniert (Cross-Browser/Plattform)?

Wenn es nicht möglich ist, gibt es einen anderen Weg mit PHP usw.?

+5

Links sollen weiter gehen. Dies wird einige Leute verwirren, die nicht erwarten, dass sie ihren Browserverlauf auslösen und später ihren echten Zurück-Button verwenden. Andere Leute werden verwirrt sein, da sie erwarten, dass sie sie auf die Seite bringen, die sich logisch vor der aktuellen Seite befindet (und nicht etwa auf der Suchmaschine, von der sie kamen). Andere Leute haben JS nicht aktiviert und werden verwirrt sein, weil index.php nicht "zurück" ist. ** Browser haben eingebaute Schaltflächen. Lassen Sie die Benutzer die Funktionen verwenden, die sie kennen. Versuchen Sie nicht, das Rad neu zu erfinden! Sie * werden * quadratische Räder bekommen! ** – Quentin

+2

@David danke für alle Informationen. Ich kenne die meisten der besten Praktiken .. aber ein Bedarf ist ein Bedürfnis. Hier habe ich diese Frage für eine Lösung gestellt und möchte nicht, dass Benutzer den Zurückknopf des Browsers verwenden .. außerdem habe ich den Kontext nicht erwähnt, den ich den Zurückknopf hier benutze. So erhalten Sie nicht, dass ich versuche, etwas neu zu erfinden/zu erfinden. – user187580

+3

Sie müssen uns entschuldigen, aber wir haben ein paar hundert Entwickler getroffen, die eine skriptgesteuerte Aktion für schreckliche fehlgeleitete managergesteuerte Gründe haben wollen, die ihre Anwendungen viel schlechter machen und noch keine nützliche Anwendung eines Skript-Backs. – bobince

Antwort

24

sollte es history.go(-1)

+0

Ich benutze 'onclick =" javascript: history.go (-1) "' und es funktioniert jetzt in iOS 8.1.2 Safari –

+3

Beachten Sie, dass, wenn Sie dies an einen Event-Handler auf einem 'a'-Tag anhängen, machen sicher, dass Sie 'event.preventDefault()' vor der Rückkehr, oder das wird immer noch nicht in Safari arbeiten. –

12

Sie sich überlegen sollte es so stattdessen tun:

diese
<a href="javascript:history.go(-1)">Back</a> 
+0

funktioniert es auch auf Safari? – user187580

+1

Ja, es funktioniert in Safari. –

+2

Wenn Sie kein Bookmarklet-Installationsprogramm schreiben, sollten Sie keine JavaScript-Pseudo-URI auf einer Webseite verwenden. – Quentin

3

Versuchen Sie stattdessen. Es sollte über IE, FF, Safari und Chrome funktionieren.

<a href="#" onclick="if(document.referrer) {window.open(document.referrer,'_self');} else {history.go(-1);} return false;">Cancel<a> 
+0

fyi, gehen zurück mit Referrer Formdaten nicht beibehalten, sondern eine neue Seite öffnen – dwkd

-1

Ich sah ein ähnliches Problem auf einer E-Commerce-Website, die ich für einen meiner Kunden gebaut habe. Ich ging zunächst die Route des Anrufs:

window.history.back(); 

, wenn die Schaltfläche geklickt wurde. Ich habe das gleiche Problem mit Cross-Kompatibilitätsproblemen festgestellt.

zu beantworten, die Sie über

Frage, ob es nicht möglich ist, gibt es eine andere Art und Weise mit PHP etc?

Meine Meinung ist, dass Sie keine Methode auf dem Server aufrufen sollten, eine Clientoperation auszuführen. Dies ist unnötiger Aufwand für Ihre App und meiner Meinung nach ein schlechtes Design/Implementierung.

Jetzt ist Ihre wichtigste Frage zu beantworten:

Gibt es eine Möglichkeit, um es auf allen Systemen/Browser (Cross-Browser/Plattform) funktioniert?

Um das Problem zu lösen ich eine Client-Cookie-Bibliothek von Mozilla (https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie) von einer anderen Stackoverflow Post hergestellt aus (meine Entschuldigung an den Autor - ich habe den Link zu Ihrem Beitrag nicht).

$('#id-of-button-clicked').click(function() { 
    docCookies.setItem("back-url", window.location.href, ".myDomain.com", "/"); 
}); 

Dieser Code: zurück zu der Lage sein, geht

die Bibliothek verwendet ich ein Cookie mit einem Schlüssel von ‚Back-URL‘ auftreten, wenn der Benutzer zum Teil meiner App navigiert, wo ich sie will setzt ein Cookie mit einem Schlüssel/Wert-Paar 'back-url' und der aktuellen URL und macht es über das Stammverzeichnis von myDomain.com zugänglich.

Als nächstes auf der Seite, wo ich möchte der Benutzer auf die URL in der Cookie in der Lage sein zu navigieren zurück, ich den folgenden Code nennen:

$(‘#id-of-back-button’).click(function() { 
    window.location.href = docCookies.getItem('back-url'); 
}); 

Dieser Code setzt die Fensterposition durch die Einstiegs- Wert von 'Zurück-URL'.

Haftungsausschluss: Ich bin kein professioneller js-Entwickler - nur versuchen, meine zwei Cent aus einigen Lektionen setzen, die ich gelernt habe.

Herausforderungen zu dieser Antwort:

  • Diese Antwort verwendet Cookies, viele Menschen die Verwendung von Cookies nicht mögen. Die Anforderungen meiner Kunden erlauben mir, Cookies zu verwenden.
  • Ich verschlüssele nicht den Cookie - einige können diese schlechte Praxis betrachten. Ich bin noch in der frühen Implementierungsphase unserer Entwicklung. Ich beschränke den Zugriff auf den Cookie jedoch nur auf unsere Domain.
Verwandte Themen