onPageFinished is firing before page is loaded

android, android-webview

Solution

try this :-

OnClickListener btnGoListener = new OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        webView00.loadUrl(etUrl.getText().toString());
        webView00.setWebViewClient(new WebViewClient() {

            public void onPageFinished(WebView view, String url) {
                Toast.makeText(getBaseContext(), "Loading Finished 2", Toast.LENGTH_LONG)
                .show();
            }
        });
    }
};
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.activity_web_page00);

    webView00 = (WebView) findViewById(R.id.webView00);
    btnGo = (Button) findViewById(R.id.go_btn);
    etUrl = (EditText) findViewById(R.id.url_edittext);

    webView00.getSettings().setJavaScriptEnabled(true);

    btnGo.setOnClickListener(btnGoListener);
    webView00.loadUrl("http://google.com");

    //webView00.setWebViewClient(new myWebViewClient());
    //webView00.setWebChromeClient(new myWebChromeClient());
    webView00.setWebViewClient(new WebViewClient() {

        public void onPageFinished(WebView view, String url) {
            Toast.makeText(getBaseContext(), "Loading Finished 1", Toast.LENGTH_LONG)
            .show();
        }
    });
}

Problem

I just want to know when html page is loaded. OnPageFinished is called before whole page is loaded. I got blank view when I set Image View by bitmap created from WebView ``` mWebView.getSettings().setJavaScriptEnabled(true); mWebView.setAlwaysDrawnWithCacheEnabled(true); mWebView.setWebViewClient(new WebViewClient(){ @Override public void onPageStarted(WebView view, String url, Bitmap favicon){ super.onPageStarted(view, url, favicon); } @Override public void onPageFinished(WebView view,String url){ Bitmap b = Bitmap.createBitmap( 480, 240, Bitmap.Config.ARGB_8888); Canvas c = new Canvas(b); view.layout(view.getLeft(), view.getTop(), view.getRight(), view.getBottom()); view.draw(c); mImageView.setImageBitmap(b); //b.recycle(); } }); ``` EDIT : I tried to implement JavaScriptInterface for now only with making Toast message, but it still doesn't work. I've pasted html code and Java : EDIT : I finally got it working. I used JavaScriptInterface with proper . When loadUrl is launch html file is being loaded. When whole page is available on screen, onload function from html file call captureImage function from JavaScriptInterface class. Now I have sure that page is fully loaded and I can grab picture of it. Thanks for all help. CODE: JAVA : ``` mWebView.getSettings().setJavaScriptEnabled(true); mWebView.setDrawingCacheEnabled(true); mWebView.addJavascriptInterface(new JavaScriptInterface(this), "Android"); mWebView.setWebViewClient(new WebViewClient(){}); mButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mWebView.loadUrl("file:///android_asset/html_sample.html"); //mWebView.loadUrl("https://www.onet.pl"); } }); public class JavaScriptInterface { private Context mContext;; public JavaScriptInterface(Context context) { mContext = context; } @JavascriptInterface public void captureImage(){ Bitmap b = mWebView.getDrawingCache(true); mImageView.setImageBitmap(b); } @JavascriptInterface public void showToast(String toast) { Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show(); } } ``` HTML : ``` <html> <head> <title>My first styled page</title> <link rel="stylesheet" href="sample_css.css"> </head> <body onload="function(){ Android.captureImage() }"> ... </body> </html> ```

Original source

Related problems