这是google chrome的截图。当我尝试使用基本身份验证访问页面时,将显示此身份验证对话框。我想在我的android Webview
中启用这个功能,让用户输入他们的用户名和密码。但它只显示401
未经授权的页面,而不显示此弹出窗口。我如何在Webview
中实现这一点?我已经尝试添加这些代码片段,但仍然无法显示此弹出窗口。
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);
发布于 2021-09-28 03:36:16
您需要覆盖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();
}
https://stackoverflow.com/questions/69355444
复制相似问题