【问题标题】:Android JavaScript autocomplete form WebViewAndroid JavaScript 自动完成表单 WebView
【发布时间】:2018-10-11 19:57:53
【问题描述】:

使用此代码,我可以轻松地将用户名和密码自动粘贴到 facebook.com
目的是为用户选择的每个站点自动粘贴用户名和密码。许多应用程序都这样做,但我还没有找到方法。感谢您的帮助

@Override
public void onPageFinished(WebView view, String url) {
    super.onPageFinished(view, url);
    progressBar.setVisibility(View.GONE);
    String user = "user";
    String pwd = "pass";
    view.loadUrl("javascript:(function(){document.getElementsByName('email')[0].value='"
            + user
            + "';document.getElementsByName('pass')[0].value='"
            + pwd + "';document.getElementsByTagName('form')[0];})()");
}

【问题讨论】:

    标签: android webview autofill


    【解决方案1】:

    您的代码目前在 facebook.com 中有效。但是在引入多个站点时,您应该对这些特定站点实施 URL 检查,因为您不应该使用所有用户名和密码在 WebView 上运行所有可能的脚本。例如

    if(url.contains("facebook.com")){ your facebook username & password injection code here }
    

    多个脚本来自于并非每个页面都对登录元素使用相同的元素名称/ID。

    如果您希望它在其他网站上工作,您需要分别检查和定义这些网站(在您的应用程序内)以查看元素使用的名称/ID(据我所知,无法从不同的部位),然后为每个部位进行相同类型的注射。

    作为额外提示,您还可以简化 JavaScript,因为您可能不会在同一页面加载中再次调用该函数。

    view.loadUrl("javascript:document.getElementsByName('email')[0].value='"+ user+ "';document.getElementsByName('pass')[0].value='"+ pwd + "';document.getElementsByTagName('form')[0];");
    

    【讨论】:

      【解决方案2】:

      就像 Speditz 所说,并非每个登录页面都使用相同的 name / id 元素。

      一般来说,大多数网站要么使用type="email"type="text"作为用户名,type="password"作为密码登录,你可以做一些字段存在检查并进行注入网页加载后

      view.loadUrl(
          "javascript:window.onload= (function(){"
          + "var selectElementName = document.querySelector('input[type=\"email\"]');"
          +"if(selectElementName){selectElementName.value =  \"" + user + "\";}"
          +"var selectElementName = document.querySelector('input[type=\"text\"]');"
          +"if(selectElementName){selectElementName.value =  \"" + user + "\";}"
          +"var selectElementpassword = document.querySelector('input[type=\"password\"]');"
          +"if(selectElementpassword){selectElementpassword.value =  \"" + pwd + "\";}"
          +"})();"
      );
      

      这是上面的纯文本 JavaScript 更容易理解:

      window.onload= function(){
      
                  var selectElementName = document.querySelector('input[type="email"]');
                  if(selectElementName){selectElementName.value =  "username";}
      
                  var selectElementName = document.querySelector('input[type="text"]');
                  if(selectElementName){selectElementName.value =  "username";}
      
                  var selectElementpassword = document.querySelector('input[type="password"]');
                  if(selectElementpassword){selectElementpassword.value =  "password";}
       };
      

      【讨论】:

      • 代码已更新,请先尝试将所有内容放在onPageFinished
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-27
      • 2017-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-06
      • 2015-02-16
      相关资源
      最近更新 更多