2014-07-09 10 views
16

Ho il seguente codice nella mia pagina per inviare il modulo nella pagina automaticamente quando il DOM è pronto:Documento pronti presentazione e cronologia del browser

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

Tuttavia, nella pagina successiva, se l'utente fa clic back sul browser ritorna alla pagina precedente a questa piuttosto che alla pagina con questo codice attivo (con Chrome/IE comunque). vale a dire la pagina con il modulo su manca nella cronologia del browser.

Questo è ottimo, anche se mi sono chiesto se questo è qualcosa che tutti i browser moderni ora fanno? Sto cercando una risposta che citi fonti ufficiali come da documenti standard di Internet o da venditori di browser che affermano il meccanismo che hanno implementato.

Questo sembra accadere solo se chiamo la funzione submit() negli eventi DOM ready o Window load.

ad es. questo codice mostrerà la pagina del modulo in cronologia del browser dopo che la pagina viene cliccato (avanti/indietro): -

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

i seguenti frammenti di non: -

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

Sì vostra destra ..se provi a inviare il modulo su dom ready, non verrà aggiunto nella cronologia se navighi utilizzando il pulsante Indietro. http://stackoverflow.com/questions/158319/cross-browser-onload-event-and-the- pulsante indietro questo potrebbe aiutare per favore controllare .. – Amit

+3

Proprio come la Corea del Nord, puoi manipolare la cronologia secondo necessità: http://html5doctor.com/history-api/ –

+0

non solo in domReady ... anche in _runtime script_ e '$ .load' (finestra). – Frogmouth

risposta

7

Mi sono occupato di questo prima. Non volevo che lo back button prendesse lo l'utente alla pagina precedente. Utilizzando onbeforeunload risolto il problema per me ...

Ma il problema è legato ai seguenti concetti

  • Navigazione Contesto
  • Sessione Storia
  • sostituzione Enabled (bandiera)

  1. A "Browsing contesto" è un ambiente in cui "Documento" oggetti sono presentati all'utente.

  2. La sequenza di "Documenti" in un "Contesto di esplorazione" è la sua "Cronologia di sessione". La "Cronologia sessioni" di elenca questi "documenti" come voci piatte.

  3. "Sostituzione abilitata" entra in vigore quando ci propagiamo da un "Documento" a un altro nella "Cronologia di sessione". Se l'attraversamento è stato avviato con "Sostituzione abilitata", la voce immediatamente precedente alla voce specificata (nella "Cronologia sessioni") viene rimossa.

Nota Una scheda o una finestra in un browser Web contiene in genere un contesto di navigazione, così come un iframe o frame in un set di cornici.


Logicamente pensare, chiamando uno di questi

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();}; 

si sono suggerendo il browser per eseguire #3, perché ciò che quelle chiamate significano è che si propagano via dalla pagina al più presto come carica. Anche a me quel codice è ovviamente :) chiedendo di essere cancellato dalla "Storia della sessione".

Ulteriore lettura ...

+0

| "Anche a me quel codice è ovviamente :) che chiede di essere cancellato dalla 'Storia della sessione'." ...: D divertente, e risposta informativa. – divyaSharma

0

Quando l'utente preme il posteriore pulsante, il browser mostra la copia cache della pagina. Il modulo di invio non memorizza nella cache la pagina, pertanto non viene visualizzata nella cronologia.

+2

@Downvoter ... Qual è il problema? – msbarnard

+3

La cache Internet si trova nella cartella File temporanei Internet sul disco rigido. La cronologia di Internet è un record di tutti i siti che hai visitato. Sono indipendenti l'uno dall'altro. – skam

1

Dal momento che questo codice lascia la pagina nella storia quando risponde alla manifestazione click: -

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

e le seguenti parti di codice non lasciare la pagina di storia (DOMContentLoaded, e window onload eventi): -

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(); }; 

si può presumere che i browser moderni non registrano una storia di navigazione per la navigazione pagina che si verifica all'interno del carico finestra o documentare i gestori pronti.

+0

Vorrei anche aggiungere un test per vedere se è _function wrapper_ (load, domcontentloaded) che fa sì che non sia "historied" o sia _time_ di quei metodi. Voglio dire che questo sarebbe un buon test per scoprirlo: 'window.addEventListener ('load', function() {setTimeout (function() {document ... form ... submit}, 3000);});' –

-1

Sì, il reindirizzamento da un gestore di eventi onload fa sì che il nuovo URL sostituisca quello che si lascia nella cronologia (e quindi non aggiunge una voce inutile). Ma questo non è l'unico fattore scatenante di tale sostituzione, ma potrebbe anche essere causato dal fatto che qualsiasi cambio di posizione si verifica abbastanza velocemente, questo ritardo è stato progettato per evitare di inquinare la cronologia in caso di ri-indicazioni basate su JavaScript.

È molto difficile trovare le specifiche su quell'argomento, ma su Firefox questo ritardo sembra essere di 15 secondi. Ecco una menzione di questo ritardo nella bugzilla da uno degli sviluppatori MOZ:

Mozilla utilizza una soglia di 15 secondi per decidere se una pagina deve soggiorno nella storia o no. Se un sito utilizza e reindirizza a un altro sito con 15 secondi O reindirizza a un'altra pagina in onLoadHandler() ecc., La pagina reindirizzata sostituirà (e quindi eliminando) la pagina di reindirizzamento dalla cronologia. Se il reindirizzamento avviene dopo 15 secondi, la pagina di reindirizzamento rimane nella cronologia .

Si potrebbe discutere del limite di tempo . Ma questo è solo qualcosa che pensavamo fosse un numero ragionevole

+0

Che cosa?! Io non la penso così ... – divyaSharma