WIll window.addEventListener(“load”,function(),false);等待浏览器自动填充字段?

时间:2012-09-07 17:34:15

标签: javascript greasemonkey addeventlistener

我正在创建一个GreaseMonkey脚本,只要用户在浏览器中保存了用户名和密码,该脚本就会自动登录页面。这很简单,它只是检查以确保用户名字段和密码字段不是空白,然后它会自动点击登录按钮。

我偶尔会遇到一个没有登录的问题。页面加载,只是坐在那里。我认为这只是由于在检查用户名和密码字段时页面未完全加载。

因此,我将此添加到我的脚本中。

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

我的问题是......这实际上会等待浏览器在尝试登录之前自动填充这些字段,还是页面加载并且浏览器会在这些字段中填充2个不同的操作?

2 个答案:

答案 0 :(得分:2)

您的意思是引用Login而不是立即执行它吗?

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

您的方式在窗口加载之前执行Login

答案 1 :(得分: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);
  }
}