我目前正在开发一个带有内置网络浏览器的应用程序。为了让我们的客户的生活更轻松,我们可以让他们选择将他们网站的密码存储在他们的数据库中。目前,我们使用 Javascript 在页面加载后将信息拉入浏览器。
这是我们在需要加载用户/密码的页面上运行的脚本....
JavaScript:
var pwd="{0}"; //get password from vb.net app
var usr="{1}"; //get username from vb.net app
var inputs=document.getElementsByTagName("input"); //look for all inputs
for(var i=0;i<inputs.length;i++){{ //for each input on document
var input=inputs[i]; //look at whatever input
if(input.type=="password"&&(input.name.toLowerCase().indexOf("auth")==-1)){
{input.value=pwd}
}
if(input.type=="text"&&(input.name.toLowerCase().indexOf("login")!=-1||input.name.toLowerCase().indexOf("user")!=-1||input.name=="AgentAccount")){
{input.value=usr}
}
}};
undefined;
我正在查看的其中一个页面是 https://www.pagepluscellular.com/login/ -- 我正在查看的表单代码是这样的。
<div class="row">
<label for="username">Username:</label>
<input name="username" type="text" maxlength="75">
</div>
<div class="row">
<label for="password">Password:</label>
<input name="password" type="password" maxlength="50">
</div>
再一次,这工作正常。它很好地填充了密码/用户名字段。
我的问题是为什么/如何,特别是与 .indexOf("whatever") 有关的问题。根据我的理解,当前脚本查找输入,检查它是否是密码字段或者你有什么,然后设置该字段......
但它从未真正寻找这些字段。例如,在上面列出的 pagepluscellular 网站上,输入的名称是“用户名”和“密码”,但在我们的脚本中,它实际上从未查找名称“用户名”或“密码”......所以它怎么知道填写那些特定的输入?
我想做的就是这个。我们找到了一个网站,这对它不起作用。即https://www.boostmobilesales.com/boost-sales-portal/faces/login.jsp .此页面上的表单代码是...
<input id="loginform:username" type="text" name="loginform:username" "class="outputtext" size="20">
<input id="loginform:password" type="password" name="loginform:password" value="" size="20" class="inputSecret">
所以我 99.99% 确定这是因为名称是“loginform:whatever”。我不知道的是如果名称实际上是“loginform:whatever”,如何告诉我的脚本包含它。我尝试将我的脚本更改为此...(只是检查它是否等于“loginform:whatever”)
JavaScript:
var pwd="{0}"; //get password from vb.net app
var usr="{1}"; //get username from vb.net app
var inputs=document.getElementsByTagName("input"); //look for all inputs
for(var i=0;i<inputs.length;i++){{ //for each input on document
var input=inputs[i]; //look at whatever input
if((input.type=="password"&&(input.name.toLowerCase().indexOf("auth")==-1)) || input.name.toLowerCase() == "loginform:password"){
{input.value=pwd}
}
if((input.type=="text"&&(input.name.toLowerCase().indexOf("login")!=-1||input.name.toLowerCase().indexOf("user")!=-1||input.name=="AgentAccount")) || input.name.toLowerCase() == "loginform:username"){
{input.value=usr}
}
}};
undefined;
但它没有给我所需的行为,而是最终破坏了原始行为,因此没有一个起作用(pageplus 网站停止提取用户名/密码)。当我恢复到原始脚本时,它又开始工作了。
有人能给我解释一下这行代码背后的逻辑吗?
input.name.toLowerCase().indexOf("auth") == -1 // or !=-1 for "login", etc
我的理解是您正在查看小写的输入名称,并查看它是否包含单词“auth”。如果它在第一个空格中包含'auth',它应该填写密码......对吗?
抱歉发了这么长的帖子,我只是想把我的想法记在某个地方并解释一下我到目前为止所做的一切。
最佳答案
input.name.toLowerCase().indexOf("auth")==-1
表示输入名称不包含字符序列 auth
(否则索引将是一个非负数)。
关于javascript - 使用 Javascript 自动填写网页用户名密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25167257/