tam*_*ler 5 android webview webchromeclient
我需要访问WebView中的进度值 - > WebChromeClient - > onProgressChanged().进度整数值不会从0增加到100,而是跳转.以下是加载一个页面的示例日志输出和相关的进度编号:
DEBUG: progress : 10
DEBUG: progress : 100
DEBUG: progress : 10
DEBUG: progress : 100
DEBUG: progress : 10
DEBUG: progress : 100
DEBUG: progress : 10
DEBUG: progress : 10
DEBUG: progress : 100
DEBUG: progress : 10
DEBUG: progress : 100
DEBUG: progress : 10
DEBUG: progress : 100
DEBUG: progress : 10
DEBUG: progress : 100
DEBUG: progress : 10
DEBUG: progress : 30
DEBUG: progress : 100
DEBUG: progress : 10
DEBUG: progress : 30
DEBUG: progress : 100
DEBUG: progress : 10
DEBUG: progress : 30
DEBUG: progress : 37
DEBUG: progress : 45
DEBUG: progress : 48
DEBUG: progress : 49
DEBUG: progress : 50
DEBUG: progress : 52
DEBUG: progress : 54
DEBUG: progress : 56
DEBUG: progress : 59
DEBUG: progress : 61
DEBUG: progress : 63
DEBUG: progress : 66
DEBUG: progress : 68
DEBUG: progress : 70
DEBUG: progress : 73
DEBUG: progress : 75
DEBUG: progress : 77
DEBUG: progress : 79
DEBUG: progress : 82
DEBUG: progress : 84
DEBUG: progress : 86
DEBUG: progress : 87
DEBUG: progress : 88
DEBUG: progress : 89
DEBUG: progress : 100
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
码:
webView.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {
Log.i(LOG_TAG, "DEBUG: progress : " + progress);
}
});
Run Code Online (Sandbox Code Playgroud)
根据我自己的实验,我发现onProgressChanged可以针对相同的进度值多次调用相同的URL(例如:google.com progress = 100次调用两次).
我还发现在你加载另一个url时,onProgressChanged将被调用为一个url.时间表示例:
在这一点上,我应该提一下,在我的实验中,我重写了shouldOverrideUrlLoading()以查看重定向,即使我没有看到重定向,上面仍然会发生.那么为什么会这样呢?
根据这个答案(为什么WebChromeClient.onProgressChanged和jquery的$(document).ready()回调之间有明显的延迟?):因为在触发脚本之前加载了一个页面,所以文档就绪会查找要加载的所有html元素首先除了图像和类似的东西,所以你的脚本在所有内容都被加载之前不会触发,到那时你的onprogresschanged首先收到100%,因为它可能比你的javascript更高优先级,因为所有设备都要求检查是否js应该允许或不允许,因此在调用此方法之前必须经过一些检查.
所以要把它们放在一起这就是你需要做的:
码
private boolean isCurrentUrl(String url){
return url.toLowerCase().contains(currentUrl.toLowerCase());
}
public void onPageStarted(WebView webView, String url,
android.graphics.Bitmap bitmap){
if (isCurrentUrl(url)){
pageLoaded = false;
}
}
public void onPageFinished(WebView webview, String url){
if (isCurrentUrl(url)){
pageLoaded = true;
}
}
public boolean shouldOverrideUrlLoading(WebView view, String
url){
if (!currentUrl.equalsIgnoreCase(url)){
currentUrl = url;
view.loadUrl(currentUrl);
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3585 次 |
| 最近记录: |