2014-07-09 8 views
16

Ich habe den folgenden Code in meiner Seite das Formular auf der Seite automatisch einreichen, wenn das DOM ist bereit:Dokument bereit Formulareinreichung und Browser-History

$(function() { 
    $('form').submit(); 
}); 

jedoch auf der nächsten Seite, wenn der Benutzer klickt zurück in ihrem Browser geht es zurück zu der Seite vor diesem und nicht die Seite mit diesem Code auf (mit Chrome/IE sowieso). die Seite mit dem Formular on fehlt in der Browserhistorie.

Das ist toll, obwohl ich mich gefragt habe, ist das etwas, was alle modernen Browser jetzt tun? Ich bin auf der Suche nach einer Antwort, die offizielle Quellen zitiert, wie zum Beispiel von Internet-Standarddokumenten oder von Browser-Anbietern, die den von ihnen implementierten Mechanismus angeben.

Dies scheint nur geschehen, wenn ich die submit() Funktion im DOM bereit oder Window laden Ereignisse aufrufen.

z.B. Dieser Code wird die Formularseite in Browser-Verlauf zeigen, nachdem die Seite (vor/zurück) geklickt wird: -

document.addEventListener('click', function() { document.forms[0].submit(); }, false); 

folgende Schnipsel werden nicht: -

document.addEventListener('DOMContentLoaded', function() { document.forms[0].submit(); }, false); 
window.addEventListener('load', function() { document.forms[0].submit(); }, false); 
window.onload = function() { document.forms[0].submit(); }; 
+1

Ja rechts ..Wenn Sie versuchen, das Formular unter dom bereit zu senden, wird es nicht im Verlauf hinzugefügt, wenn Sie mit der Zurück-Schaltfläche navigieren. http://stackoverflow.com/questions/158319/cross-browser-onload-event-and-the- Back-Button dies könnte helfen, bitte überprüfen .. – Amit

+3

Genau wie Nordkorea, können Sie Geschichte nach Bedarf manipulieren: http://html5doctor.com/history-api/ –

+0

nicht nur in domReady ... sogar in _runtime script_ und '$ (Fenster) .Load'. – Frogmouth

Antwort

7

Ich habe damit schon einmal fertig. Ich wollte nicht die back button den Benutzer zurück zur vorherigen Seite nehmen. Mit onbeforeunload löste das Problem für mich ...

Aber ist Ihr Problem auf folgende Konzepte im Zusammenhang

  • Browsing Context
  • Session History
  • Ersatz Aktiviert (Flag)

  1. A "Browsing Kontext" ist eine Umgebung, in der "Dokument" Objekte werden dem Benutzer präsentiert.

  2. Die Reihenfolge der "Dokumente" in einem "Browserkontext" ist die "Sitzungshistorie". Die "Session History" listet diese "Dokumente" als flache Einträge auf.

  3. "Ersetzung aktiviert" wird wirksam, wenn wir von einem "Dokument" zu einem anderen im "Sitzungsverlauf" propagieren. Wenn das Traversal mit "Replacement Enabled" initiiert wurde, wird der Eintrag unmittelbar vor dem angegebenen Eintrag (im "Session History") entfernt.

Hinweis A Tab oder Fenster in einem Web-Browser enthält in der Regel einen Browser-Kontext, als iFrame oder Frames in einem Frameset tut.


Logisch denken, von irgendwelchen

document.addEventListener('DOMContentLoaded', function() {document.forms[0].submit();}, false); 
window.addEventListener('load', function() {document.forms[0].submit();}, false); 
window.onload = function() {document.forms[0].submit();}; 

rufen Sie sind was darauf hindeutet, der Browser #3 auszuführen, weil das, was diese Anrufe bedeuten , dass sich so schnell von der Seite propagieren wie es lädt. Sogar für mich ist dieser Code offensichtlich :) fragen, um von der "Session History" gelöscht werden.

Weiterführende Literatur ...

+0

| "Sogar für mich ist dieser Code offensichtlich :), der darum bittet, von der 'Sitzungsgeschichte' befreit zu werden." ...: D lustige und informative Antwort. – divyaSharma

0

Wenn der Benutzer trifft den Rücken Schaltfläche, zeigt der Browser die zwischengespeicherte Kopie der Seite an. Formular senden speichert die Seite nicht zwischen, daher wird sie nicht in Ihrem Verlauf angezeigt.

+2

@Downvoter ... Was ist das Problem? – msbarnard

+3

Ihr Internet-Cache befindet sich im Ordner Temporary Internet Files auf Ihrer Festplatte. Ihr Internetprotokoll ist eine Aufzeichnung aller Websites, die Sie besucht haben. Sie sind unabhängig voneinander. – skam

1

Seit diesem Code läßt die Seite in der Geschichte, wenn sie das click Ereignis reagieren: -

document.addEventListener('click', function() { document.forms[0].submit(); }, false); 

und die folgenden Teile des Codes Sie die Seite in der Geschichte nicht verlassen (DOMContentLoaded und window onload Ereignisse): -

document.addEventListener('DOMContentLoaded', function() { document.forms[0].submit(); }, false); 
window.addEventListener('load', function() { document.forms[0].submit(); }, false); 
window.onload = function() { document.forms[0].submit(); }; 

kann davon ausgegangen werden, dass moderne Browser bereit Handler keine Navigationsverlauf für Seitennavigation aufzuzeichnen, oder dokumentieren innerhalb des Fensters Last auftritt.

+0

Ich würde auch einen Test hinzufügen, um zu sehen, ob es das _function wrapper_ (load, domcontentloaded) ist, das verursacht, dass es nicht "historied" ist oder es _time_ dieser Methoden ist. Ich meine, das wäre ein guter Test, um es herauszufinden: 'window.addEventListener ('load', function() {setTimeout (function() {document ... form ... submit}, 3000);});' –

-1

Ja, die Umleitung von einem onload Event-Handler bewirkt, dass die neue URL die URL ersetzt, die Sie im Verlauf hinterlassen haben (und fügt daher keinen unbrauchbaren Eintrag hinzu). Aber das ist nicht der einzige Auslöser für diese Ersetzung, es kann auch dadurch verursacht werden, dass jeder Standortwechsel schnell genug stattfindet, wobei diese Verzögerung so gestaltet ist, dass die Historie im Fall von JavaScript-basierten Umleitungen nicht verschmutzt wird.

Es ist sehr schwer, eine Spezifikation zu diesem Thema zu finden, aber auf Firefox diese Verzögerung scheint 15 Sekunden zu sein. Hier ist eine Erwähnung dieser Verzögerung in bugzilla von einem des moz Entwicklers:

Mozilla verwendet eine Schwelle von 15 Sekunden, um zu entscheiden, ob eine Seite soll Aufenthalt in der Geschichte oder nicht. Wenn eine Website verwendet und Umleitungen an einem anderen Standort mit in 15 Sekunden oder Umleitungen zu anderen Seite in onLoadHandler() etc ..., wird die Weitergeleitete Seite ersetzen (und damit eliminiert), um die Ablen Seite aus der Geschichte. Wenn die Umleitung nach 15 Sekunden erfolgt, bleibt die Umleitungsseite in Verlauf.

Man kann sich über die Zeitlimit streiten. Aber das ist nur etwas, von dem wir dachten, es wäre eine vernünftige Nummer

+0

Was?! Ich glaube nicht ... – divyaSharma

Verwandte Themen