Android webview : 显示网页访问认证的默认 JS 弹窗

Posted

技术标签:

【中文标题】Android webview : 显示网页访问认证的默认 JS 弹窗【英文标题】:Android webview : Show the default JS popup for web page access authentication 【发布时间】:2021-11-20 02:59:32 【问题描述】:

这是来自谷歌浏览器的截图。当我尝试使用基本身份验证访问页面时,会显示此身份验证对话框。我希望在我的 android Webview 中也启用此功能,并让用户输入他们的用户名和密码。但相反,它只显示401 未经授权的页面,而不显示此弹出窗口。我将如何在Webview 中实现这一点?我已尝试添加这些 sn-ps,但仍然无法显示此弹出窗口。

    webview.getSettings().setjavascriptEnabled(true);
    webview.getSettings().setBuiltInZoomControls(true);
    webview.getSettings().setSupportZoom(true);
    webview.getSettings().setLoadWithOverviewMode(true);
    webview.getSettings().setUseWideViewPort(true);
    webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
    webview.getSettings().setSupportMultipleWindows(true);
    webview.getSettings().setDomStorageEnabled(true);
    webview.getSettings().setDatabaseEnabled(true);
    webview.getSettings().setAppCacheEnabled(true);
    webview.getSettings().setSaveFormData(true);
    webview.getSettings().setMixedContentMode(MIXED_CONTENT_ALWAYS_ALLOW);
    webview.getSettings().setAllowFileAccess(true);
    webview.getSettings().setAllowFileAccessFromFileURLs(true);
    webview.getSettings().setAllowUniversalAccessFromFileURLs(true);
    webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

【问题讨论】:

【参考方案1】:

您需要覆盖WebViewClient.onReceivedHttpAuthRequest() 来处理身份验证。您的代码负责显示身份验证对话框或检索保存的用户名/密码。这不会为您完成。

这是在我的应用程序中运行的代码。为了清楚起见,我删除了其中的一些部分。

    @Override
public void onReceivedHttpAuthRequest(final WebView view,
                                      final HttpAuthHandler handler,
                                      final String host,
                                      final String realm) 
    if(handler.useHttpAuthUsernamePassword()) 
        String[] creds = view.getHttpAuthUsernamePassword(host,realm);
        if(creds!=null) 
            handler.proceed(creds[0],creds[1]);
            return;
        
    

    AlertDialog.Builder builder = new AlertDialog.Builder(context);
// set up the input for user name and password here
// ... removed for clarity ...
    builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() 
        @Override
        public void onClick(DialogInterface dialog, int which) 
            String name = nameEdit.getText().toString();
            String pass = passEdit.getText().toString();
            view.setHttpAuthUsernamePassword(host,realm,name,pass);
            handler.proceed(name,pass);
        
    );
    builder.setOnCancelListener(new DialogInterface.OnCancelListener() 
        @Override
        public void onCancel(DialogInterface dialog) 
          handler.cancel();
        
    );
    AlertDialog dialog = builder.create();
    dialog.show();

【讨论】:

有什么例子吗?因为我也试过这个方法但是给了我401 我编辑了我的答案以包含一些代码。它适用于我的应用程序。

以上是关于Android webview : 显示网页访问认证的默认 JS 弹窗的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Webview 中访问相机?

如何从 Webview 中访问相机?

Android-使用WebView显示网页

Android:控件WebView显示网页

Android:控件WebView显示网页

android开发中,webview常用于显示网页或h5页面,一个遇到跨域方面的坑。