13

ブラウザの[戻る]ボタンを押して[質問する]ページに戻ると、タイトルまたは本文の部分が記憶されていることに気付きました。

この機能は、テストしたすべてのブラウザーで使用できますが、自分のプロジェクトのフォームには存在しません。

どうすればその効果にアプローチできますか?

アップデート

私はまだ手がかりを持っていませんが、httpヘッダーまたはjavascriptによって有効にされたある種のクライアントキャッシュだと思いますか?

4

4 に答える 4

6

それはあなたのページのキャッシュプロパティと関係があります。

1)ブラウザがページのキャッシュを許可されている場合、ブラウザはフォームフィールドも記憶します。

2)ページのキャッシュが許可されていない場合、すべてを忘れてしまいます。

通常、動的に生成されたページはカテゴリ2に分類されるため、キャッシュは表示されません。これは実際にHTTPヘッダー(特にCache-ControlとLast-Modified、またはE-Tagを使用)によって決定されます。ブラウザがキャッシュを決定する方法(自明ではありません!)の説明については、たとえば次を参照してください。

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

ただし、最も簡単なのは、フォームを静的HTMLページに配置することです。そうすれば、Webサーバーがすべてを処理します。

于 2010-05-03T16:00:27.670 に答える
4

Cache-Control提供するページにパラメータを設定するメカニズムを見つける必要があります。

Webページをどのように提供しているかを示すものではありません。ただし、これは、戻るボタンを使用してページに戻るときにフォームのコンテンツが消えるASPページの例です(これは現在発生している動作です)。

<% 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>    

上の3行に注意して、いくつかの小さな変更を加えてください...

<% 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>    

これで、入力フィールドの内容が保持されます。これはあなたが達成しようとしている振る舞いです。特定のニーズとサーバーによって適用されるデフォルトに応じて、設定する必要のある追加のパラメーターが存在する場合があります。

Cache-Controlの詳細については、次を参照してください。

ASPのキャッシュ制御。Microsoftのほとんどのものと同様に、IEについてのみ説明します。

キャッシングに関するこのチュートリアルでは、PHPを含むいくつかの異なるWebサーバーのサンプルコードを紹介します。

w3.orgは、特にCache-Controlのセクション14.9で実際に学習する必要のあるリファレンスです。

探している動作を取得するための鍵は、正しいキャッシュ制御パラメーター化を使用してページを提供することです。

于 2010-05-03T17:38:12.020 に答える
1

私は実際には多くの意見を述べることはできませんが、「質問をする」ページのhttpヘッダーは次のようになります。

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

私はそれをあなた自身のページ/フォーム、特にキャッシングと有効期限を扱うヘッダーと比較します。

于 2010-05-03T16:11:40.987 に答える
0

魔法はありません。次の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>

ブラウザで開き、テキストを入力し、リンクをクリックしてから[戻る]ボタンをクリックすると、値が記憶されます。IE8、FireFox 3.6、Chrome4でテストおよび動作しています。

于 2010-05-03T15:10:38.060 に答える