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