呈现网页时onPageFinished无法正确触发


问题内容

由于某种原因,onPageFinished在WebView完成加载之前就触发了-我不知道为什么…

public class WebViewClientTest extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    final WebView webview = (WebView) findViewById(R.id.webview);

    webview.setWebViewClient(new WebViewClient() {  
        @Override  
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(webview, url);
            webview.scrollTo(0, 500);
        }  
    });
    webview.loadUrl("http://www.google.co.uk/search?sourceid=chrome&ie=UTF-8&q=lala");

}
}

好的,看来这不是固定的。我认为加载页面时出现了竞争情况,但是无法获得可复制的行为。

我将网页的HTML内容存储在SQLite数据库中,以便离线查看。我使用以下命令将内容重新加载到WebView中:

webView.loadDataWithBaseURL("fake://fake.com/", htmlBody, "text/html", "utf-8", null);

似乎有时在加载WebView时,它会正确触发WebViewClient.onPageFinished()方法,而其他时候则不会。有时,它似乎在页面完成加载之前触发,产生contentHeight为0并忽略所有scrollTo调用。

有人对此有经验吗?


问题答案:

我有一个项目,该项目的代码仅在webview显示其内容之后才需要运行,并且像您一样,onPageFinished()无效。在Webview实际渲染页面之前,它触发得太快了。

相反,我必须使用“ PictureListener”,当Webview实际更新屏幕时会被触发。

您可以这样使用它:

mWebView.setPictureListener(new MyPictureListener());
//... and then later on....
class MyPictureListener implements PictureListener {

    @Override
    public void onNewPicture(WebView view, Picture arg1) {
      // put code here that needs to run when the page has finished loading and
      // a new "picture" is on the webview.      
    }    
}