1

私は、表示するためにログインする必要がある単一のドキュメント (最初の後に実際のページは読み込まれず、すべて ajax) で実行される Web サイトに取り組んでいます。フロント ページのログイン フォームは、期待どおりに自動入力されます。

問題は、iframe にログイン フォームをロードするときです。ほとんどのブラウザーでは、フロント ページと同じ情報が自動入力され、完全に機能します。しかし、Android ブラウザーでは、フォームはまったく自動入力されません。

私の質問は、HTMLでサーバー側を自動入力するだけでなく、Androidブラウザで正しく機能させる方法はあるのでしょうか?

フォームの html は次のとおりです。

<form method="POST" id="login_form" class="disable_on_submit">
    <input type="hidden" name="action" value="login" />
    <div class="row first">
        <label for="username">Email Address:</label>
        <input type="email" name="username" id="username" placeholder="Email Address..." />
    </div>
    <div class="row">
        <label for="password">Password:</label>
        <input type="password" name="password" id="password" placeholder="Password..." />
    </div>
    <input type="submit" name="submit" id="submit" class="awesome" value="Login" />
</form>
4

1 に答える 1

0

そのため、この問題を直接解決する方法は見つかりませんでしたが、ちょっとしたハックを思い付きました。

まず、iframe ではなく、実際のドキュメントにログイン フォームのコピーを追加します。

this.fake_form = $('<form method="POST" id="login_form" autocomplete="on"><input type="email" name="username" id="username" /><input type="password" name="password" id="password" /></form>');
$(document.body).append(this.fake_form);
this.fake_form.hide();

次に、偽のフォームに自動入力データをポーリングします。非表示になっているため、ユーザーが何も入力していないことがわかります。

function check_fake_form()
{
    var real_form = this.iframe.contents().find('body #whiteboard');
    var real_u = real_form.find('#username');
    var real_p = real_form.find('#password');

    //if the real form has any values, we're done
    if (real_u.val().trim() != '' || real_p.val().trim()) {
        return;
    }

    var fake_u = this.fake_form.find('#username').val().trim();
    var fake_p = this.fake_form.find('#password').val().trim();

    //if the fake form has values, put them in the real form and quit
    if (fake_u != '' || fake_p != '') {
        real_u.val(fake_u);
        real_p.val(fake_p);

        return;
    }

    //check again in a short time
    setTimeout(check_fake_form, 50);
}

これは、動作していなかった Android のバージョンで問題なく動作するように見え、単独で動作するブラウザに干渉しません。

于 2013-10-03T18:57:12.750 に答える