编辑:我几年前就参与过这个项目,不幸的是我无法验证是否有任何答案在给定的场景中有效。
我在使用一个应该显示我们的博客的 WebView 时遇到了困难。初始化后,它工作得很好。用户可以导航到 WebView 中的不同链接。要返回博客,WebView 外部有一个按钮,可以再次加载主博客站点。
问题是,第二次调用 loadUrl 后没有加载任何内容。这是我的代码:
private WebView wv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.blog);
wv = (WebView) findViewById(R.id.blog_webview);
wv.getSettings().setJavaScriptEnabled(true);
wv.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon {
MyLog.logDump("onPageStarted: " + url);
}
@Override
public void onPageFinished(WebView view, String url) {
MyLog.logDump("onPageFinished: " + url);
}
});
wv.loadUrl(Constants.BLOG_URL);
}
我的 OnClickListener 调用的函数如下:
public void reLoadUrl() {
wv.loadUrl(Constants.BLOG_URL);
}
但是,尽管 onPageFinished 和 onPageStarted 中的日志显示我的 wv.loadUrl 正在被调用并且正在加载正确的 url,但 webview 本身中的内容并没有改变。我尝试清除缓存、历史记录、视图,尝试不同的 WebSettings,尝试使用 webView.goBack() - 但没有结果。这些想法也行不通:Strange webview goBack issues in android
有时,reLoadUrl 显示所需的结果 - 但一旦失败,就无法再使其再次工作。有什么想法可能会发生什么吗?我确实尝试阅读 WebView 代码,但找不到任何可以帮助我的内容。
我唯一可以补充的是,我们正在使用一些严重依赖于 webView 的广告网络 - 我试图将其关闭,但我没有删除这些库,所以我不确定它们不是罪魁祸首.
有什么想法吗??
按以下顺序使用精确值。
wv.clearCache(true);
wv.clearView();
wv.reload();
wv.loadUrl("about:blank");
wv.loadData(Constants.BLOG_URL);
我花了大约一天的时间开发一个使用 WebView 的应用程序。我在将数据加载到 WebView 时确实遇到了一些问题。
我不完全确定这会起作用,但也许可以替换此代码:
public void reLoadUrl() {
wv.loadUrl(Constants.BLOG_URL);
}
使用此代码:
公共无效reLoadUrl(){
wv.clearView();
wv.loadUrl(Constants.BLOG_URL);
}
也许当你清除WebView时它会解决问题
我建议您每次使用它时尝试重新创建
WebView
,看看是否有任何区别。
首先保存上下文、布局参数和父级。
Context context = wb.getContext();
ViewGroup.LayoutParams lp = wv.getLayoutParams();
ViewGroup parent = (ViewGroup)wv.getParent();
然后停止加载并从其父视图中删除视图。
wv.stopLoading();
parent.removeView(wv);
然后重新创建并将其添加回来。
wv = new WebView(context);
parent.addView(wv, lp);
这可能是您需要恢复的其他属性,但这是总体思路。
我遇到了同样的问题,调用resumeTimers()为我解决了问题......
尝试先加载空白页面:
wv.loadUrl("about:blank");
wv.clearHistory();
wv.clearView();
wv.loadUrl(Constants.BLOG_URL);
编辑: 这是我之前用过的代码,因为我也遇到过这个问题,请尝试一下。
尝试设置 WebChrome 客户端。 webview在某些情况下需要WebChrome Clint的支持才能正常工作。
wv.setWebChromeClient(new WebChromeClient());
只需创建一个方法,在其中刷新重新初始化整个 WebView 并从中调用它 重新加载Url()。
void loadWebView() {
wv = (WebView) findViewById(R.id.blog_webview);
wv.getSettings().setJavaScriptEnabled(true);
wv.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon {
MyLog.logDump("onPageStarted: " + url);
}
@Override
public void onPageFinished(WebView view, String url) {
MyLog.logDump("onPageFinished: " + url);
}
});
wv.loadUrl(Constants.BLOG_URL);
}
public void reLoadUrl() {
loadWebView();
}
@override
public void onFormResubmission(WebView view, Message dontResend, Message resend){
resend.sendToTarget();
}
我面临着同样的问题,并通过以下步骤使其正常工作:
webView.clearCache(true);
webView.loadUrl("Url");
我成功加载了多个网址。
我面临着同样的问题,终于能够解决这个问题。我是 Android 新手,不确定这是好是坏,但它对我有用。我只是从 Web 视图中清除捕获,然后在重新加载另一个 url 之前销毁并重新创建.
mWebView.clearCache(true);
// destroy before reload new url
parentView.removeView(mWebView);
mWebView.clearHistory();
mWebView.destroy();
虽然 mWebView.destroy();生成错误“java.lang.Throwable:错误:WebView.destroy() 在仍附加时调用!”我搜索它但没有得到任何解决方案,很多人说它到现在为止都不影响应用程序(我仍然不知道解决这个问题注意:我使用 WebChromeClient )。
我也面临着同样的问题。我每次都创建一个新的 Webview。在创建新的 webView 之前,先销毁之前的 webView。我希望这有帮助! 让你的 webview 成为一个全局变量。喜欢-
网页视图;
然后在创建新的 webview 之前销毁之前的 webview
if(null != w)
{
//destroy the previous webview, before creating the new one
w.destroy();
}
w= new WebView(activity);
在
onPause()
中调用此方法
private void pauseWebView() {
try {
Class.forName("android.webkit.WebView")
.getMethod("onPause", (Class[]) null)
.invoke(webview, (Object[]) null);
} catch(ClassNotFoundException cnfe) {
} catch(NoSuchMethodException nsme) {
} catch(InvocationTargetException ite) {
} catch (IllegalAccessException iae) {
}
}
我遇到了同样的问题,上述解决方案都不适合我。所以我通过使用 JavaScript 重新加载 WebView 来修复它,如下所示:
webView.loadUrl( "javascript:window.location.reload( true )" );
还需要为 WebView 启用 JavaScript:
webView.getSettings().setJavaScriptEnabled(true);
尝试重新加载 url 并正确销毁 webview 以避免缓存和内存泄漏问题,正如我在这里回答的那样 https://stackoverflow.com/a/67450119/1843984
我也遇到了同样的问题。但设置WebChromeClient后,它工作正常。您也可以重写 onConsoleMessage 来检查任何错误日志。
webView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
ConsoleLogger.d(TAG, consoleMessage.message() + " -- From line "
+ consoleMessage.lineNumber() + " of "
+ consoleMessage.sourceId());
return super.onConsoleMessage(consoleMessage);
}
});
在
onCreate
中,不要使用 wv.loadUrl(Constants.BLOG_URL);
,只需使用 wv.loadDataWithBaseURL(baseUrl, readFileAsString("index.html") , mimeType, "UTF-8", null);