如何在 Webview 中保存用户名和密码

Posted

技术标签:

【中文标题】如何在 Webview 中保存用户名和密码【英文标题】:How to Save Username and Password in Webview 【发布时间】:2021-11-07 10:36:26 【问题描述】:

目前我还在学习android开发,如果我的这个问题对你来说不是很容易理解,请见谅。

我创建了一个 Android 应用程序,它使用 RecyclerView 显示一组列表,当用户单击列表中的每个名称时,它会将它们重定向到一组不同的网站,并将显示在 WebView 中。这些网站中的每一个都有不同的登录页面。我不控制那些网站。这些网站会关闭它们的 cookie。现在,在这种情况下是否可以保存用户的用户名和密码?

当我加入 Facebook、Instagram 和 Twitter 时,我的应用程序能够保存用户名和密码(可能是因为它们正在保存 cookie?)。但是,如果我尝试我想添加的特定网站(特殊情况),则不会保存用户名和密码。

由于不推荐使用 setSavePassword 方法,我找不到其他方法来实现保存用户名和密码。我已经多次阅读有关 SharedPreferences、javascript 和 Autofill 的内容,但我不知道如何将它们正确地实现到我的应用程序中。因为从我阅读的大部分内容来看,建议首先需要一个登录页面来保存用户名和密码。

这是我的 WebView 代码。

public class WebViewActivity extends AppCompatActivity 

    private WebView webView;
    String url = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.webview);
        
        webView = findViewById(R.id.webView);
        
        WebSettings webSettings = webView.getSettings();
        
        websettings.setDomStorageEnabled(true);
        websettings.setJavaScriptEnabled(true);
        webView.getSettings().setAppCachePath(getApplicationContext().getFilesDir().getAbsolutePath() + "/cache");
        webView.getSettings().setDatabasePath(getApplicationContext().getFilesDir().getAbsolutePath() + "/databases");
        
        if (Build.VERSION.SDK_INT >= 21) 
            CookieManager.getInstance().setAcceptThirdPartyCookies(webView, true);
         else 
            CookieManager.getInstance().setAcceptCookie(true);
        
        
        webView.loadUrl(url);
        
        webView.setWebViewClient(new WebViewClient()
            @Override
            public void onPageFinished(WebView view, String url) 
                super.onPageFinished(view, url);
            
        
        ...
    
    
    ...

谢谢。

【问题讨论】:

你能在 Chrome 浏览器上这样做吗? 嗨。是的。如果我使用 Chrome 浏览器,我可以保存用户名和密码。即使在 Firefox 中,我也可以保存用户名和密码。 写一个不保存用户名和密码的网站 我看到删除它 @nima 你找到实现预期结果的方法了吗? 【参考方案1】:

由于错误,该帖子已被删除

【讨论】:

我没有写 yourLoginUrl 和 urlContains 因为你说它有安全原因。如果你在线,我会去他们的地址 我可以用 (url + "/login") 代替 (""yourLoginUrl") 吗? 您可以将这些代码放在 onFinish 中,而不是 shouldInterceptRequest。但是 onFinish 有时会晚点结束,我认为这种方法更好。 点击提交后,将用户和密码发送到processContent方法。在日志中可以看到 我试了好几次了,还是不行。我输入的 yourLoginUrl & urlContains 有没有可能是错误的?【参考方案2】:

您可以在单击按钮上从 webview 检查以下链接,您可以导航到 java 类并使用界面完成您的工作 Webview's html button click detection in Activity(java code)

【讨论】:

嗨。新手来了请详细说明您的答案。我找不到我的问题和你的答案之间的相关性。

以上是关于如何在 Webview 中保存用户名和密码的主要内容,如果未能解决你的问题,请参考以下文章

android:webview中如何监听用户操作记录并获取其记录

在 webview 中保存密码

如何将登录详细信息存储在 Android 的本地存储中

如何在 Git 中保存用户名和密码?

如何在应用程序中保存用户登录名和密码

使用flutter_webview_plugin加载页面后如何在WebView中执行JavaScript代码