java - 呈现网页时 onPageFinished 未正确触发

标签 java android webkit

由于某种原因,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.      
    }    
} 

关于java - 呈现网页时 onPageFinished 未正确触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3702627/

相关文章:

java.lang.NoSuchFieldError : gostR28147_cbc

java - 数据绑定(bind)插件使用旧版本的支持库

image - 为什么每次刷新时此 JPG 呈现不同?

java - 指定的 Oracle URL 无效 : OracleDataSource. makeURL

java - 阻止添加空元素的集合实现

java - 停止发送 GPS 坐标 Android

webkit - 所有Webkit浏览器都正式支持rel = noreferrer吗?

python - PyQt Webkit 和 html 表单 : Fetching output and closing window

java - PlayFramework 初学者。路由定义错误

android使用dragonSDK初始化连接报错