使用Javascript自动填充网页用户名密码

时间:2014-08-06 18:12:51

标签: javascript html

我目前正在使用内置网络浏览器开发应用程序。为了让我们的客户更轻松,我们可以选择将他们网站的密码存储在他们的数据库中。目前,我们正在使用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(&#34;无论&#34;)。根据我的理解,当前脚本会查找输入,检查它是否是密码字段或者您有什么,然后设置该字段......

但它从未真正寻找过这些领域。例如,在上面列出的pagepluscellular网站上,输入名称为&#34; username&#34;和#34;密码&#34;,但在我们的脚本中,它实际上从未查找名称&#34;用户名&#34;或者&#34;密码&#34; ....那么它如何知道如何填写这些特定的输入?

我想做的就是这个。我们找到了一个这个DOESN&T的网站。即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%确定它是因为名字是&#34; loginform:所以&#34;。我不知道如何告诉我的脚本如果名称实际上是&#34; loginform:whatever&#34 ;.我尝试将我的脚本改为此...(只是检查它是否等于&#34; loginform:无论&#34;)

的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

我的理解是,您正在查看小写的输入名称,并查看它是否包含单词&#39; auth&#39;。如果它包含&#39; auth&#39;在第一个空格中,它应该填写密码....对吧?

对于这篇长篇文章感到抱歉,我只是想把我的想法告诉某个地方并解释我到目前为止所做的一切。

1 个答案:

答案 0 :(得分:3)

input.name.toLowerCase().indexOf("auth")==-1表示的输入名称根本不包含字符序列auth(否则索引将为非负数)。