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()方法,而其他时间则不会。 有时它会在页面加载完成之前触发,产生一个0的contentHeight并忽略任何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. } } 

在渲染我的网页时,我有同样的问题来解雇我的progressdialog。 我用onPageStarted解决了。 我希望这个解决scheme可以帮助你。

  @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); progressBar.dismiss(); } @Override public void onPageStarted(WebView view, String url, android.graphics.Bitmap favicon) { if (!progressBar.isShowing()) { progressBar.show(); } }; 

嗯,如果我做我自己的私人课程,它的作品…

 private class ViewStoryWebViewClient extends WebViewClient { @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(webView, url); webView.scrollTo(0, 50); } } 

我得到了与loadDataWithBaseURL()完全相同的东西。 有时内容不显示,contentHeight为0.奇怪的是,单击Web视图中的任何地方都会导致内容显示。 另外,如果调用zoomIn();zoomOut();onPageFinished()方法中,页面将会出现。

编辑:与我的代码的问题是,HTML内容在onload事件中有一个虚拟的window.location =赋值,这导致原始内容不随机加载。 对不起,我不认为这与你所看到的有关。