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 弹窗的主要内容,如果未能解决你的问题,请参考以下文章