Tarayıcılar hiç ajax yüklenen giriş formlarında otomatik tamamlama destekliyor musunuz?

6 Cevap php

Benim sorun tarayıcıları '(IE ve FF) otomatik tamamlama benim giriş formu çalışmıyor olmasıdır.

CakePHP ve bir webapp var jQuery. Ziyaretçilerin giriş için izin / sedasız kayıt. Login formun AJAX yoluyla yüklenen bir div, içeride. (Bu sayfayı yeniden olmadan oturum sağlar.)

Onlar giriş tıklandığında kimlik bilgilerini kaydetmek için beni ister gibi tarayıcılar, bir giriş alanı olarak tanımak yok. Onlar tarayıcı ayarlarında kayıtlı olanlar arasında göründükleri gibi ve onlar gerçekten, kullanıcı adı / şifre kaydederim. Ancak kaydedilen kullanıcı adı / şifre otomatik olarak girilir asla. Onlar sayfa yüklendiğinde önceden girilen görünmüyor. Ben adı yazmaya başladığınızda, adı bir öneri olarak görünür, ama bunu seçmek bile, şifre yanında girilmez. Neden? Nasıl bu çalışma alabilirim?

Kendiniz test edebilirsiniz ki, burada, basit bir AJAX giriş formu:

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

It loads the following login form, if you go to the url below, autocomplete will work for just the plain form, so it is not a problem with the form itself, but rather that it is AJAX loaded: http://gablog.eu/test/loginform.html

Düzen:

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

Görünümü (giriş yapmadın zaman) yüklenir:

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

Netleştirmek için: AJAX otomatik tamamlama kullanmak istemiyorum, ben tarayıcınızın otomatik tamamlama benim giriş formu için çalışmak istiyorum. Bu benim form ve tarayıcı arasında bir konudur. jQuery submission seems to play a minor role, as the usernames/passwords are saved. They are just not auto-entered for ajax loaded HTML elements! (. Test sitesi jQuery teslim kullanmak değildir) İlgili soru: http://stackoverflow.com/questions/1622628/browser-autocomplete-saved-form-not-work-in-ajax-request

6 Cevap

Otomatik tamamlama, Firefox azından, sayfa yükleme sırasında tetikler. Sonradan içerik ekleme fırsat penceresi özledim olacaktır.

Bir oturum açma formu küçük. Ben başından itibaren sayfası dahil ve istediği kadar CSS ile gizleyerek düşünecektim.

Yardımcı olur durumda, msdn (sayfanın altına doğru) diyor ki:

Note: if both of the following conditions are true:

  • Sayfa HTTPS üzerinden teslim edildi
  • 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.

Ben ilginç bir bit cesaret ettik.

.

Ben bunu gerçekten istismar ya da değil olabilir if (güvenlik-bilge bilmiyorum ajax form yüklenemedi eğer çalışmak için form otomatik tamamlama alabilirsiniz düşünüyorum, ama yok bir komut dosyası içine yükleme alanları başlayabileceğini gerçeği eklenen gets verileri görmek için sayfa) bana çok iyi görünmüyor.

Eğer yapabilirseniz, iyi seçenek php dosyasına bir koşullu blok eklemek ve kullanıcı oturum açmış olup olmadığını bağlı formu veya dahil etmek olacaktır. Nedense bunu yapamıyorsanız, yerine ajax çağrısının bir document.write () (yapmak için denemek isteyebilirsiniz ve evet, document.write kullanarak çirkin :)

Giriş formu ajax ile çekilecek olduğunda ben davayı görmek - eğer web yüklerin kalanı gibi statik html (cache). Giriş formu (veya authed kullanıcı bilgileri) görüntülenir statik olamaz.

Yani çözüm sağ ajax çekti loginform en html, eski için üst öğe olarak hizmet DOM elemanının beyanı (bitiş etiketi) sonra formunu çekmek için:

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

Ve tarayıcı DOM onLoad formu vardır. Test, firefox bu durumda otomatik tamamlama yapar.

Ben bu yüzden onun yerine Chrome ile bir sorunu dava yük zaman benim sayfanın içine giriş formunu yükleme memnun değilim;

http://code.google.com/p/chromium/issues/detail?id=123955&thanks=123955&ts=1334713139

Orada cevap verilir: http://www.webmasterworld.com/javascript/4532397.htm. Bu teslim yöntemi ile bir şey yapar ve daha sonra tıklama yöntemi kullanır. i formu teslim değilse değerler kaydedilmez bildiğiniz gibi. ben bu çözümün yazar sadece bu olsa düğme kullanıcı tarafından tıklandığında değil göndermek teslim yapar düşünüyorum.