我试图在我的WebView中加载一些包含JavaScript的HTML代码。
现在,我想测试我的WebView是否在5秒之前加载。我尝试过getProgress()
方法,但有时我得到的进度是100,但我的Webview没有加载。
是否有其他方法可以确保我的Webview加载100%?
这是我的代码的一部分:
sdk.getWebView().loadDataWithBaseURL("notreal/", data_html,MIME_TYPE,ENCODING_UTF_8,null);
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run(){
Log.i("TAG", "progress fin = "+sdk.getWebView().getProgress());
if(sdk.getWebView().getProgress() <100){
//cancel the webView
sdk.getContext().runOnUiThread(new Runnable() {
@Override
public void run() {
sdk.getImgView().setVisibility(View.VISIBLE);
sdk.getWebView().setVisibility(View.GONE);
}
});
}
// else ,the Webview is loaded
else{
//prepare webview
sdk.getContext().runOnUiThread(new Runnable() {
@Override
public void run(){
// hide imageView
sdk.getImgView().setVisibility(View.GONE);
sdk.getWebView().setVisibility(View.VISIBLE);
}
});
}
}
};
timer.schedule(task, 5000);
9条答案
按热度按时间nwsw7zdq1#
正如这里所说:如何侦听WebView加载完URL?~
pw9qyyiw2#
检测页面是否已呈现的最佳方法是使用onPageCommitVisible回调,可从API 23获得。onPageLoadFinished不合适,因为它交付得太快(当HTML被处理,但尚未呈现时)。
wwwo4jvm3#
ryevplcw4#
您需要覆盖
WebViewClient
的onPageFinished
这里有一个例子给你
von4xj4u5#
您可以尝试扩展WebChromeClient,覆盖
onProgressChanged(WebView view, int newProgress)
并使用setWebChromeClient(WebChromeClient)
方法在WebView上注册它。这将使您的应用程序从额外的线程中解放出来,您正在启动该线程来检查进度是否发生了变化。使用callback,它更简单。所以这将是第一件事。另一个是,我也在试验这种进展状态,我得出了一些关于它如何表现的结论:
stopLoading()
时,进度将返回为100%,总而言之,这个进度条是WebView是否完成了网站加载的指示器,但就WebKit而言,并不是页面被完全下载。你必须记住,连接可能会崩溃,资源(images,css,js)可能由于某种原因无法加载,JavaScript可以加载更多的资源,当页面将完成加载等。这个进度不能告诉你网站内容是否已完全加载,它告诉你WebView认为这应该是全部。
我没有其他的想法如何检查页面是否已完全加载或没有,我认为这是唯一的方法。
2j4z5cfb6#
为WebView设置WebChromeClient另一种确定页面加载何时完成的方法
vdgimpew7#
上述解决方案对我不起作用,我想确保页面加载100%,然后注入JavaScript对页面进行深入研究。我想出了以下解决方案,与NeteInStEiN提供的解决方案几乎没有偏差。这可能不是对每个人都有效,但它对我有效。同样,这取决于你想从完成的页面中获得什么。
希望这能有所帮助。
qyuhtwio8#
我也有一个解决方案,因为已经通过了加载完成后需要显示WebView的条件。希望你们能理解。
wsewodh29#
下面的代码运行得很好。一旦页面加载成功,它将触发onPageFinished()