编写webview后加载操作

时间:2015-03-04 08:21:22

标签: android

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毫秒就不够了等。

可以这样做吗?

1 个答案:

答案 0 :(得分:1)

以下是解决此问题的几种方法,主要在this post中解决。但是,据我所知,他们都没有真正解决它。

1)子类WebView并覆盖invalidate()docs)方法。有时可能不会调用此方法。

@Override
public void invalidate() {
    super.invalidate();

    if (getContentHeight() > 0) {
        // Add code here 
    }
}

2)使用PictureListenerdocs)实施setPictureListener。请注意,这已被弃用。

webView.setPictureListener(new PictureListener() {
    @Override
    public void onNewPicture(WebView webView, Picture picture) {
        // Add code here
    }
});

3)使用WebChromeClient并覆盖onProgressChangeddocs)。在加载URL时可能会多次调用此方法。

webView.setWebChromeClient(new WebChromeClient() {
    @Override
    public void onProgressChanged(WebView view, int newProgress) {
        super.onProgressChanged(view, newProgress);

        if (newProgress==100) {
            // Add code here
        }
    }
});