呈现网页时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.
}
}