IE7 フォームは、JavaScript を通じて送信されるときにパスワードを記憶するように求められません
-
03-07-2019 - |
質問
Javascript を使用してログイン フォームを送信する Web サイトがあります。Firefox では、ログイン時にユーザーにパスワードを記憶するよう求められますが、IE7 ではそのようなことはありません。
いくつか調査した結果、IE7 では、送信コントロールを介してフォームが送信された場合にのみ、ユーザーにプロンプトが表示されるようです。これが事実であることを証明するために、サンプル HTML を作成しました。
<html>
<head>
<title>test autocomplete</title>
<script type="text/javascript">
function submitForm()
{
return document.forms[0].submit();
}
</script>
</head>
<body>
<form method="GET" action="test_autocomplete.html">
<input type="text" id="username" name="username">
<br>
<input type="password" id="password" name="password"/>
<br>
<a href="javascript:submitForm();">Submit</a>
<br>
<input type="submit"/>
</form>
</body>
</html>
href リンクではプロンプトが表示されませんが、IE7 では送信ボタンが表示されます。どちらも Firefox で動作します。
送信ボタンを使用してもサイトのスタイルを同じにすることができません。JavaScript 経由で送信するときにパスワードを忘れないようにするプロンプトを表示させる方法を知っている人はいますか?
解決
この方法でフォーム送信をフックしてみてはいかがでしょうか?
<html>
<head>
<title>test autocomplete</title>
<script type="text/javascript">
function submitForm()
{
return true;
}
</script>
</head>
<body>
<form method="GET" action="test_autocomplete.html" onsubmit="return submitForm();">
<input type="text" id="username" name="username">
<br>
<input type="password" id="password" name="password"/>
<br>
<a href="#" onclick="document.getElementById('FORMBUTTON').click();">Submit</a>
<br>
<input id="FORMBUTTON" type="submit"/>
</form>
</body>
</html>
そうすれば、リンクがクリックされたか、送信ボタンが押されたか(または Enter キーが押されたか)に関係なく、関数が呼び出され、false を返すことで送信をキャンセルできます。これは、IE7 がフォームの送信を解釈する方法に影響を与える可能性があります。
編集:フォームオブジェクトで submit() を呼び出すのではなく、常にこの方法でフォーム送信をフックすることをお勧めします。submit() を呼び出しても、フォーム オブジェクトの onsubmit はトリガーされません。
他のヒント
href に URL を入力し、クリック イベント ハンドラーをアタッチしてフォームを送信し、URL が移動しないようにクリック ハンドラーから false を返してみましたか。
あるいは、JavaScriptによってトリガーされる非表示の送信ボタン?
リンクや送信ボタンの代わりに、HTML の <button> タグを使用してみてください。
例えば、
<button type="submit">Submit</button>
<button> タグは、標準の <input type="submit"> よりもスタイルを設定するのがはるかに簡単です。ブラウザ間での癖はいくつかありますが、克服できないものではありません。
<button> の使用に関する非常に優れた記事が、particletree にあります。 ボタン要素の再発見