【问题标题】:Android webview : Show the default JS popup for web page access authenticationAndroid webview : 显示网页访问认证的默认 JS 弹窗
【发布时间】: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);

【问题讨论】:

    标签: android webview android-webview android-websettings


    【解决方案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
    • 我编辑了我的答案以包含一些代码。它适用于我的应用程序。
    猜你喜欢
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    • 2017-01-29
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多