Hou*_*ine 54 android android-webview
我正在尝试在我的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);
Run Code Online (Sandbox Code Playgroud)
net*_*ein 80
如上所述:如何监听WebView完成加载URL?
boolean loadingFinished = true;
boolean redirect = false;
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String urlNewString) {
if (!loadingFinished) {
redirect = true;
}
loadingFinished = false;
view.loadUrl(urlNewString);
return true;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap facIcon) {
loadingFinished = false;
//SHOW LOADING IF IT ISNT ALREADY VISIBLE
}
@Override
public void onPageFinished(WebView view, String url) {
if(!redirect){
loadingFinished = true;
}
if(loadingFinished && !redirect){
//HIDE LOADING IT HAS FINISHED
} else{
redirect = false;
}
}
});
Run Code Online (Sandbox Code Playgroud)
检测页面是否已呈现的最好方法是使用API 23提供的onPageCommitVisible回调。onPageLoadFinished不适合使用,因为它交付的太早了(在处理HTML但尚未呈现时)。
webview.setWebViewClient(new WebViewClient() {
@Override
public void onPageCommitVisible (WebView view,
String url)
}
}
Run Code Online (Sandbox Code Playgroud)
你需要覆盖onPageFinished的WebViewClient
这是一个例子
private class Callback extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
//do what you want to do
}
}
Run Code Online (Sandbox Code Playgroud)
您可以尝试扩展 WebChromeClient,onProgressChanged(WebView view, int newProgress)使用setWebChromeClient(WebChromeClient)方法覆盖并在您的 WebView 上注册它。这将使您的应用程序从您开始检查进度是否更改的附加线程中解放出来。使用回调,比较简单。所以这将是第一件事。
另一个是我也在试验这种进度状态,我得出了一些关于它的行为的结论:
stopLoading()WebView 时,进度将返回为 100% ,综上所述,这个进度条是一个WebView是否已经完成加载站点的指示器,但对于WebKit而言,不是页面完全下载的指示器。您必须记住,连接可能会崩溃,资源(图像、css、js)可能由于某种原因无法加载,JavaScript 可以在页面完成加载时加载更多资源等。此进度无法告诉您站点是否内容是否已完全加载,它告诉您 WebView 认为这应该是全部。
我对如何检查页面是否完全加载没有其他想法,我认为这是唯一的方法。
webView.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {
if (progress == 100) {
//do your task
}
}
});
Run Code Online (Sandbox Code Playgroud)