2

ユーザーがブラウザにユーザー名とパスワードを保存している限り、ページに自動ログインする GreaseMonkey スクリプトを作成しています。それは非常に単純です。ユーザー名フィールドとパスワード フィールドが空白でないことを確認するだけで、ログイン ボタンが自動的にクリックされます。

時々、ログインできない問題に遭遇していました。ページがロードされ、そこに座っていました。ユーザー名とパスワードのフィールドのチェックが完了したときに、ページが完全に読み込まれていないことが原因だと思いました。

このため、これをスクリプトに追加しました。

window.addEventListener("load", Login(), false);

私の質問は...これは実際にブラウザがログインを試みる前にこれらのフィールドに自動入力するのを待つのでしょうか、それともページがロードされ、ブラウザがそれらのフィールドに2つの異なるアクションを入力しますか?

4

2 に答える 2

2

Loginすぐに実行するのではなく、参照するという意味ですか?

window.addEventListener("load", Login, false);

ウィンドウがロードLogin される前に、あなたの方法が実行されます。

于 2012-09-07T17:38:39.870 に答える
0

自動保存されたフォームの動作に関する標準がないため、タイマーを設定しますsetTimeout()

えーと、私は馬鹿でした。ユーザーがユーザー情報を入力しようとすると、現在のコードは悪いことをします。

テストされていない、すばやく記述されたコード:

function logMeIn() {
  var el = document.getElementById("username");
  if (el && el.value !== "") {
    // Finish the login
  } else {
    window.setTimeout(logMeIn, 200);
  }
}

logMeIn();

2を試してください:

// This is a User Script -- runs in its own encloser, won't pollute names back to the main document.
var loginTimer;

function logMeIn() {
  var el = document.getElementById("username");
  if (el && el.value !== "") {
    // Finish the login
  } else {
    loginTimer = window.setTimeout(logMeIn, 200);
  }
}

logMeIn();

// can't use ".onfocus" -- its a userscript.
// Cancel the timer if the username field gets focus -- if the user tries to enter things.
document.getElementById("username").addEventListner("focus") = function(e) {
  if (loginTimer) {
    window.clearTimeout(loginTimer);
  }
}
于 2012-09-07T17:39:00.763 に答える