Webview WebViewClient的方法
public void onPageFinished(WebView view, String url) {
..processing code after page is loaded
}
可以在页面完全加载后用于实现任何所需的功能,但看起来这个处理程序在所有资源加载完毕后立即触发,而不是等到渲染完成。我怀疑大多数后期加载活动,例如滚动到某些html元素失败。作为解决方法,我将这些函数调用包含在Timer内,延迟时间为500 ms或更长
new Timer().schedule(new TimerTask() {
something here...
}, 500);
但它在所有情况下看起来都不可靠,例如,如果页面非常大,500毫秒就不够了等。
可以这样做吗?
答案 0 :(得分:1)
以下是解决此问题的几种方法,主要在this post中解决。但是,据我所知,他们都没有真正解决它。
1)子类WebView
并覆盖invalidate()
(docs)方法。有时可能不会调用此方法。
@Override
public void invalidate() {
super.invalidate();
if (getContentHeight() > 0) {
// Add code here
}
}
2)使用PictureListener
(docs)实施setPictureListener
。请注意,这已被弃用。
webView.setPictureListener(new PictureListener() {
@Override
public void onNewPicture(WebView webView, Picture picture) {
// Add code here
}
});
3)使用WebChromeClient
并覆盖onProgressChanged
(docs)。在加载URL时可能会多次调用此方法。
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
if (newProgress==100) {
// Add code here
}
}
});