2012-09-07 23 views
2

我创建了一个GreaseMonkey脚本,只要用户在浏览器中保存了他们的用户名和密码,它就会自动登录到页面。这很简单,只是检查以确保用户名字段和密码字段不是空白的,然后它自动点击登录按钮。WIll window.addEventListener(“load”,function(),false);等待字段被浏览器自动填充?

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

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

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

我的问题是...请问这其实等待浏览器尝试登录前自动填充这些字段或页面加载和浏览器填充这些领域的2个不同的行动?

回答

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); 
    } 
} 
+0

我一直在讨论这样做,但如果由于某种原因用户忘记在浏览器中保存他们的用户名和密码会怎么样。这不会创建一个锁定浏览器的无限循环吗? – RandomPrecision

+0

@RandomPrecision - 由于setTimeout的原因,它不会锁定浏览器。它可能会在页面上消失几个周期,但假设你不是永远坐在那页上,那应该不会太糟糕。如果您担心通过移动设备的资源烧毁,您可以放入柜台并只检查X次。当文档失去焦点时,您也可以禁用代码。为了简单起见,我放弃了这些东西。 –

+0

谢谢你的解释和代码。这将工作。谢谢。 – RandomPrecision

1

您是不是要参考Login而不是立即执行它?

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

你的方式执行窗口加载Login以前

+0

好一点 - 但仍然留下了事件处理的顺序回旋余地。它确实似乎有足够多的时间来浏览器时代自动填充表单。 –

+0

嗯..我以为window.addEventListener(“加载”,登录(),假);将等待页面加载,然后运行指定的功能。 – RandomPrecision

+0

@RandomPrecision - 'Login()'将运行该函数,然后返回一个值。 'Login'是一个函数引用,将在稍后调用。 –