web-dev-qa-db-ja.com

フォームのオートコンプリートが機能しない

いくつかの入力フィールドを持つHTMLフォームを作成しましたが、特別なものはありません。 Googleの最新バージョンChromeとFirefoxのオートコンプリートを使用すると、すべてのフォームフィールドで機能します。つまり、フォームに入力するたびに、ブラウザーはフィールドの以前の入力値を提案します。

IE8では、まったく機能しません。他のフォームは機能しますが、私の場合はIEは単一の入力値を覚えていません。フォームはSSL暗号化されていますが、動作する他のSSLフォームを試したため、それが理由だとは思いません。ヒントはありますか?ありがとう!

4
Nick

MSDNのオートコンプリートに関する記事 によると、問題はSSLだけではなく、SSLとサーバーから送信されるキャッシュヘッダーの組み合わせです。

Note: if both of the following conditions are true:
   1. The page was delivered over HTTPS
   2. The page was delivered with headers or a META tag that prevents caching

...the Autocomplete feature is disabled, regardless of the existence or 
value of the Autocomplete attribute. This remark applies to IE5, IE6, 
IE7, and IE8.

したがって、SSLを介してページを提供している場合、サーバーがCache-controlに送信するprivate, must-revalidateヘッダーを変更して、これらのページでIEオートコンプリートを機能させる必要があります。

これは、スタックオーバーフローで数回発生しました。 この回答 は、IEがこのように機能するように設計されていることをMSエンジニアから確認することを含め、特に有益です。

3
ConroyP

通常、オートコンプリートは、フォームまたは入力要素にautocomplete="off"属性を設定するか、または [ツール]> [インターネットオプション]> [コンテンツ]タブ )で無効にしない限り、「機能します」。

ただし、IEには、使用しているオートコンプリートフィールドのタイプをINPUTフィールドに伝える適切な方法があります。 VCard 命名スキームを使用してこれを行います。これは例で最もよく示されています:

<input type="text" name="email" vcard_name = "vCard.Email" />

<input type="text" name="officephone" vcard_name = "vCard.Business.Phone" />

詳細については、MSDNの記事「 HTMLフォームでのオートコンプリートの使用 」を参照してください。これは非常に古いので、IE8との関連性は不明ですが、まだ使用されていると思われます。

警告の言葉:vcard_nameおよびautocomplete属性はIEに適しており、not標準(X)HTMLであるため、それらを使用した場合、ページは検証されません。私は個人的にそれらを避けますが、それが違いを生むかどうかを確認します。

0
Dan Diplo