首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android webview :展示网页访问鉴权的默认JS弹出窗口

Android webview :展示网页访问鉴权的默认JS弹出窗口
EN

Stack Overflow用户
提问于 2021-09-28 03:26:09
回答 1查看 76关注 0票数 0

这是google chrome的截图。当我尝试使用基本身份验证访问页面时,将显示此身份验证对话框。我想在我的android Webview中启用这个功能,让用户输入他们的用户名和密码。但它只显示401未经授权的页面,而不显示此弹出窗口。我如何在Webview中实现这一点?我已经尝试添加这些代码片段,但仍然无法显示此弹出窗口。

代码语言:javascript
运行
复制
    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);

EN

回答 1

Stack Overflow用户

发布于 2021-09-28 03:36:16

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

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

代码语言:javascript
运行
复制
    @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();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69355444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档