2010-05-01 6 views
13

Ho notato che il titolo o corpo parte è ricordato se torno al Fai una domanda pagina premendo Torna pulsante del mio browser.In che modo la forma di SO ricorda i valori di input precedenti?

Questa funzione è disponibile in tutti i browser che ho provato, ma non esiste per i moduli nei miei progetti.

Come posso avvicinarmi a questo effetto?

UPDATE

io ancora non hanno alcun indizio ancora, ma immagino che che un qualche tipo di cache del client abilitata per le intestazioni HTTP o JavaScript?

+8

Questa funzione viene generalmente gestita dal browser. –

+7

Allora perché questa funzione non esiste per il mio progetto nello stesso browser? Qualcosa di diverso deve essere successo per scopo. – user198729

+0

è probabile che gli utenti spieghino come configurare il server in modo da fornire le intestazioni HTTP relative alla memorizzazione nella cache corretta, se sono state incluse informazioni sul software server che sta servendo le pagine. Ogni server ha una propria configurazione per questo genere di cose .... – vkraemer

risposta

6

Ha a che fare con le proprietà di memorizzazione nella cache della pagina.

1) Se il browser è autorizzato a memorizzare nella cache la pagina, ricorderà anche i campi del modulo.

2) Se non è consentito memorizzare nella cache la pagina, dimenticherà tutto.

Generalmente, le pagine generate dinamicamente rientrano nella categoria 2, quindi non viene visualizzata la cache. Questo è in effetti determinato dalle intestazioni HTTP (specialmente Cache-Control e Last-Modified, o usando E-Tags ). Per una spiegazione sul modo in cui il browser determina la memorizzazione nella cache (! Non banale), si veda ad esempio:

http://www.webscalingblog.com/performance/caching-http-headers-last-modified-and-etag.html

Ma più semplice è quello di mettere il modulo in una pagina HTML statica, allora il vostro server web si occuperà di tutto.

+0

Non riesco a inserire il modulo in una pagina HTML statica, e non So perché il 'cache-control' è automaticamente impostato a' \t no-store, no-cache, must-revalidate, post-check = 0, pre-check = 0', e 'Pragma' impostato su' no- cache'. – user198729

+0

il controllo della cache è impostato su quei valori per le pagine dinamiche perché (in genere) si desidera che l'utente visualizzi una pagina appena generata ogni volta, per assicurarsi che visualizzi le informazioni più recenti. In caso contrario, puoi fornire un'intestazione Cache-Control diversa dallo script. Per essere più specifici, ho bisogno di sapere quale linguaggio si usa per generare la pagina. – wump

+0

@wump: esiste una specifica standard su come i browser Web devono precompilare i valori di input? O i browser stanno implementando questo "come si sentono"? –

0

Non c'è magia. Basta provare il seguente codice HTML:

<?xml version="1.0"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>Test</title> 
</head> 
<body> 
    <input type="text" name="title" value="" /> 
    <a href="http://www.google.com">Google</a> 
</body> 
</html> 

aperto nel browser, digitare il testo, fare clic sul collegamento e quindi il pulsante Indietro e si ricorderà il valore. Testato e funzionante su IE8, FireFox 3.6, Chrome 4.

+2

Non vedo niente di speciale, puoi spiegare perché funziona? – user198729

+1

Questo probabilmente funziona perché è stato visualizzato senza un server web, sul filesystem locale. –

+0

@ user198729: '" Ha a che fare con le proprietà di memorizzazione nella cache della pagina. "Vedere la risposta di' wump' (la risposta attualmente accettata) –

1

Anche se non posso davvero dare molto adivce, le intestazioni HTTP della pagina "Fai una domanda" si presenta così:

HTTP/1.1 200 OK 
Cache-Control: private 
Content-Type: text/html; charset=utf-8 
Content-Encoding: gzip 
Vary: Accept-Encoding 
Server: Microsoft-IIS/7.5 
Set-Cookie: [EDITED AWAY} 
Date: Mon, 03 May 2010 16:04:44 GMT 
Content-Length: 4800 

mi piacerebbe Confronti che, per le proprie pagine/forme, in particolare tutte le intestazioni occupandosi di cache e scadenza.

+0

Non ho impostato alcuna informazione di intestazione, sembra che il mio server web aggiunga automaticamente il criterio di cache per me, che non è quello che desideravo. – user198729

4

È necessario trovare un meccanismo per impostare i parametri Cache-Control sulle pagine che servono.

Non si indica come si stanno servendo le pagine Web. Ma, ecco un esempio di una pagina ASP che fa sì che il contenuto del modulo a scomparire quando tornare a una pagina utilizzando il tasto indietro (questo è il comportamento si verificano attualmente):

<% Response.CacheControl = "no-cache" %>  
<% Response.AddHeader "Pragma", "no-cache" %>  
<% Response.Expires = -1 %>  
<HTML>  
<HEAD>  
<TITLE>Test page</TITLE>  
</HEAD>  
<BODY>  
Type some text into this box, click SO followed by the BACK button: 
<input type="text" name="title" value="" /> 
<a href="http://www.stackoverflow.com">SO</a>  
<p>  
When you get back the text you typed will be gone. 
</BODY>  
</HTML>  

Nota top 3 linee, fai un paio di piccole modifiche ...

<% Response.CacheControl = "private" %>  
<HTML>  
<HEAD>  
<TITLE>Test page</TITLE>  
</HEAD>  
<BODY>  
Type some text into this box, click SO followed by the BACK button: 
<input type="text" name="title" value="" /> 
<a href="http://www.stackoverflow.com">SO</a>  
<p>  
When you get back the text you typed will still be there 
</BODY>  
</HTML>  

Ora il contenuto del campo di input viene mantenuto. Questo è il comportamento che stai cercando di raggiungere. Lì potrebbero essere parametri aggiuntivi che è necessario impostare in base alle specifiche esigenze di e ai valori predefiniti applicati dal server.

Maggiori informazioni per Cache-Control sono disponibili presso:

Cache Control in ASP. Come con la maggior parte delle cose Microsoft, solo discute di IE.

Questo tutorial su Caching fornisce una buona introduzione con codice di esempio per diversi server Web, incluso PHP.

w3.org è il riferimento che ha davvero bisogno di studiare, in particolare la sezione 14.9 su Cache-Control.

La chiave per ottenere il comportamento di che si sta cercando è nelle pagine di servizio con la parametrizzazione di controllo della cache corretta.