Android。 WebView 显示白页
Android. WebView displaying white page
为什么网页视图可以显示一个白色页面,尽管页面在浏览器中打开。一开始有错误:
net::ERR_CACHE_MISS
但在我添加此代码后:
wv.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
没有错误,但是页面没有加载,只显示一个白色页面。通过单击 webview.Clicking 中的按钮打开的页面未在移动应用程序端处理。
我的清单也有权限:
<uses-permission android:name="android.permission.INTERNET" />
请帮助我。我不明白为什么会这样。该页面也在 iOS 上成功打开。
这是我的代码:
private void initView(String url) {
wvDetail.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.contains("webview://closeScreen")) {
activity.finish();
return true;
} else
return super.shouldOverrideUrlLoading(view, url);
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
Toast.makeText(activity, description, Toast.LENGTH_LONG).show();
}
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();
}
});
wvDetail.getSettings().setJavaScriptEnabled(true);
wvDetail.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
wvDetail.loadUrl(url);
}
看来是你的webview设置有问题。尝试添加以下设置:
WebSettings settings = wvDetail.getSettings();
//if your page needs javascript
settings.setJavaScriptEnabled(true);
//to handle your cache
settings.setCacheMode(WebSettings.LOAD_DEFAULT);
settings.setAppCacheEnabled(true);
settings.setAppCachePath(cacheDir.path);
要启用 JS 的某些功能,您还应该使用 setdomStorageEnabled(请参阅此 question):
settings.setDomStorageEnabled(true)
如果您的页面仍未加载并且您完全信任您将要加载的网页,我也会使用此设置来提供对 webview 的更多访问权限:
settings.setBlockNetworkImage(false);
settings.setLoadsImagesAutomatically(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
settings.setSafeBrowsingEnabled(false);
}
settings.setJavaScriptCanOpenWindowsAutomatically(true);
settings.setAllowFileAccess(true);
要使用元标记的设置加载 webview,请使用:
setUseWideViewPort(true);
最后,您可以检查您的 webView 大小并使其适合您的系统 window,如下所示:
wvDetail.setFitsSystemWindows(true);
如果您的目标是 API 11 级以上,就像奖励一样,您可以像这样设置图层类型:
wvDetail.setLayerType(View.LAYER_TYPE_HARDWARE, null);
我希望这个对 webview 中使用的常用设置的解释有意义!根据您的网页,我认为其中一些可能对您有用!让我知道它是否有效! :)
为什么网页视图可以显示一个白色页面,尽管页面在浏览器中打开。一开始有错误:
net::ERR_CACHE_MISS
但在我添加此代码后:
wv.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
没有错误,但是页面没有加载,只显示一个白色页面。通过单击 webview.Clicking 中的按钮打开的页面未在移动应用程序端处理。
我的清单也有权限:
<uses-permission android:name="android.permission.INTERNET" />
请帮助我。我不明白为什么会这样。该页面也在 iOS 上成功打开。 这是我的代码:
private void initView(String url) {
wvDetail.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.contains("webview://closeScreen")) {
activity.finish();
return true;
} else
return super.shouldOverrideUrlLoading(view, url);
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
Toast.makeText(activity, description, Toast.LENGTH_LONG).show();
}
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();
}
});
wvDetail.getSettings().setJavaScriptEnabled(true);
wvDetail.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
wvDetail.loadUrl(url);
}
看来是你的webview设置有问题。尝试添加以下设置:
WebSettings settings = wvDetail.getSettings();
//if your page needs javascript
settings.setJavaScriptEnabled(true);
//to handle your cache
settings.setCacheMode(WebSettings.LOAD_DEFAULT);
settings.setAppCacheEnabled(true);
settings.setAppCachePath(cacheDir.path);
要启用 JS 的某些功能,您还应该使用 setdomStorageEnabled(请参阅此 question):
settings.setDomStorageEnabled(true)
如果您的页面仍未加载并且您完全信任您将要加载的网页,我也会使用此设置来提供对 webview 的更多访问权限:
settings.setBlockNetworkImage(false);
settings.setLoadsImagesAutomatically(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
settings.setSafeBrowsingEnabled(false);
}
settings.setJavaScriptCanOpenWindowsAutomatically(true);
settings.setAllowFileAccess(true);
要使用元标记的设置加载 webview,请使用:
setUseWideViewPort(true);
最后,您可以检查您的 webView 大小并使其适合您的系统 window,如下所示:
wvDetail.setFitsSystemWindows(true);
如果您的目标是 API 11 级以上,就像奖励一样,您可以像这样设置图层类型:
wvDetail.setLayerType(View.LAYER_TYPE_HARDWARE, null);
我希望这个对 webview 中使用的常用设置的解释有意义!根据您的网页,我认为其中一些可能对您有用!让我知道它是否有效! :)