Подтвердить что ты не робот

Поддерживают ли браузеры автозаполнение для загруженных форматов регистрации ajax?

Моя проблема заключается в том, что автозаполнение браузера (IE & FF) не работает для моей формы входа.

У меня есть webapp с CakePHP и jQuery. Чтобы посетители могли незарегистрированно войти в систему/зарегистрироваться. Форма входа находится в div, который загружается через AJAX. (Это позволяет выполнять вход в систему без перезагрузки страницы.)

Браузеры распознают его как поле входа, так как они предлагают мне сохранить учетные данные при нажатии входа в систему. И они действительно сохраняют имя пользователя/пароль, поскольку они отображаются между сохраненными в настройках браузера. Но сохраненное имя пользователя/пароль никогда не вводится автоматически. При загрузке страницы они не отображаются заранее. Когда я начинаю вводить имя пользователя, имя пользователя появляется как предложение, но даже когда вы его выбираете, пароль не вводится рядом с ним. Зачем? Как я могу заставить это работать?

Чтобы вы могли протестировать его самостоятельно, вот простая форма входа в AJAX:

http://gablog.eu/test/ajaxlogin.html

Он загружает следующую форму входа, если вы перейдете к указанному ниже URL-адресу, автозаполнение будет работать только для простой формы, поэтому это не проблема с самой формой, а скорее, что она загружена AJAX: http://gablog.eu/test/loginform.html

Макет:

<div id="user-bar">
    <script type="text/javascript">
        $(function() {
           $("#user-bar").load('loginform.html').html();
        });
    </script>
</div>

Просмотр загружен (если он не вошел в систему):

<form id="form-login" action="" onsubmit="login(); return false;">
    <input type="text" id="username" name="username"/>
    <input type="password" id="password" name="password"/>
    <input type="submit" value="Login"/>
    <div id="login-error" class="error-message"></div>
</form>

<script type="text/javascript">
    function login() {
        $.post('/ajax/login', $("#form-login").serialize(), function(data) {
            if (data.success) {
                $("#user-bar").load('userbar.html').html();
            } else {
                $("#login-error").html(data.message);
            }
        }, "json");
    }
</script>

Чтобы уточнить: я не хочу использовать автозаполнение AJAX, я хочу, чтобы автозаполнение браузера работало для моей формы входа. Это проблема между моей формой и браузером. Представление jQuery, похоже, играет второстепенную роль, поскольку имена пользователей/паролей сохраняются. Они просто не введены автоматически для ajax-загруженных элементов HTML! (тестовый сайт не использует отправку jQuery.) Связанный вопрос: автозаполнение/сохраненная форма браузера не работает в ajax запрос

4b9b3361

Ответ 1

Автозаполнение, по крайней мере, в Firefox, срабатывает при загрузке страницы. Добавление содержимого впоследствии пропустит окно возможностей.

Форма входа - крошечная. Я бы включил его на странице с самого начала и подумал о том, чтобы скрывать его с помощью CSS до тех пор, пока он не захочет.

Ответ 2

В случае, если это помогает, msdn говорит (в нижней части страницы):

Примечание: если оба следующих условия верны:

  • Страница была доставлена ​​через HTTPS
  • Страница поставляется с заголовками или тегом META, который предотвращает кэширование

... функция автозаполнения инвалид, независимо от наличия или значение автозаполнения атрибут. Это замечание относится к IE5, IE6, IE7 и IE8.

Я ободрил интересный бит.

.

Ответ 3

Я не думаю, что вы можете получить автозаполнение формы для работы, если вы загружаете форму через ajax (по безопасности я не знаю, действительно ли это можно злоупотреблять или нет, но тот факт, что script может начать загружать поля на страницу, чтобы увидеть, какие данные вставлены, не выглядит слишком хорошо для меня).

Если вы можете, лучшим вариантом было бы добавить условный блок в файл php и включить форму или нет в зависимости от того, зарегистрирован ли пользователь или нет. Если по какой-то причине вы не можете этого сделать, вы можете попытаться сделать document.write() вместо вызова ajax (и да, используя document.write - уродливый:)

Ответ 4

Я вижу случай, когда форму входа нужно вытащить с помощью ajax - если остальная часть сайта загружается как статический html (кеш). Форма входа (или аннулированная информация пользователя) может отображаться статически.

Итак, ваше решение состоит в том, чтобы вытащить форму сразу после объявления (конечный тег) элемента DOM, который служит в качестве родительского элемента для hjml, созданного ajax-pull, ex:

<div id="loginforms_parent"></div>
<script language="javascript">
    /* ajax request and insert into DOM */
</script>

И браузер имеет форму в DOM onLoad. Протестировано, firefox делает автозаполнение в этом случае.

Ответ 6

есть ответ: http://www.webmasterworld.com/javascript/4532397.htm. он делает что-то с методом отправки, а затем использует метод click. поскольку я знаю, что значения не сохраняются, если форма не отправлена. Я думаю, автор этого решения просто делает его представленным, хотя кнопка отправки не нажата пользователем.