Пусть браузер запоминает значения полей ввода в динамически генерируемых формах - PullRequest
5 голосов
/ 12 февраля 2012

Это нормально, что браузер запоминает информацию о пользователе и пароле, если пользователь фактически нажал на «пароль страницы напоминания» (браузер, а не функция веб-сайта).

У меня есть эта форма входа, которую я генерирую с помощью асинхронного вызова, что-то вроде:

$('#container').load('/path/file.php?what=login_form');

В этой форме при отправке браузер не запоминает (и не заполняет ее для меня), даже если я нажал «да, запомнил пароль».

Означает ли это, что запоминаются только URL-формы страницы?

EDIT - пример вывода

 <div class="caja loginBox">
        <form action="index.php" method="post" name="sesion" id="sesion">
        <h1>Inicio de sesion</h1><h2>Usuario</h2>
     <input type="text" id="nombre" name="nombre"/>
     <h2>Password</h2><input type="password" id="pass" name="pass"/><button type="submit" name="inicio">Entrar</button>
     </form> </div>

1 Ответ

2 голосов
/ 25 февраля 2012

Я нашел решение, которое работает с менеджером паролей Firefox.В зависимости от того, почему вы загружаете форму динамически, мое решение может вам помочь, а может и не помочь.(Подробнее об этом ниже.)

Сначала поместите невидимую форму (я использовал встроенный стиль «display: none») на странице, которая использует тот же метод и действие и содержит поля с одинаковыми именами.,Вы можете поместить это ниже div, который в конечном итоге будет содержать реальную форму:

<div id="container"></div>

<div id="fake-form" style="display: none">
    <form action="index.php" method="post">
        <input type="text" name='nombre' class='nombre'/>
        <input type="password" name='pass' class='pass' />
    </form>
</div>

Затем в вашем JavaScript, после загрузки содержимого реальной формы, скопируйте значения из фальшивой формы ипоместите их в реальное:

<script type="text/javascript">
    $(function() {
        $("#container").load("/path/file.php?what=login_form", function() {
            var fakeForm = $("#fake-form");
            $("#nombre").val(fakeForm.find(".nombre").val());
            $("#pass").val(fakeForm.find(".pass").val());
        });
    });
</script>

Тем не менее, если вы потратите столько усилий, чтобы поместить форму на страницу до того, как вы динамически загрузите реальную форму, то почему бы просто не удалить эту последнююшаг и есть форма на странице для начала?:-) Предположительно у вас есть хорошая причина для этого, хотя.Может быть, форма, поступающая с сервера, содержит уникальную информацию о стиле, или динамические сообщения об ошибках рядом с полями, или имена полей i18n?

Однако, если форма, которую вы извлекаете с сервера, имеет действие, которое изменяется длядругие пользователи, тогда мой трюк не сработает, потому что вы должны заранее знать действие при создании скрытой формы.

Если это так, то, возможно, вы могли бы попробовать мой трюк в обратном порядке, скрыть «реальную форму», которую вы загружаете с сервера, и отобразить поддельную форму для пользователя.Поддельная форма может публиковаться на несуществующий URL, но затем вы можете использовать JavaScript, чтобы перехватить отправку «поддельной формы», скопировать имя пользователя и пароль в невидимую «реальную форму», вызвать submit в реальной форме иверните false, чтобы предотвратить отправку исходной формы.

Обновление: Подумав об этом немного больше, я не думаю, что мое второе решение будет работать, потому что менеджеры паролей почти наверняка связывают имя пользователя и пароль с окончательным URL-адресом, который вына самом деле отправляйте данные, а не начальный URL-адрес действия в форме, которую вы бы изначально притворили для отправки.В любом случае, надеюсь, мое первое решение будет адекватным тому, что вы делаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...