Come posso sapere che il mio WebView è caricato al 100%?

Sto cercando di caricare nel mio WebView un codice HTML che contiene JavaScript.

Ora, voglio verificare se il mio WebView è caricato prima di 5 secondi. Ho provato il metodo getProgress() , ma a volte ottengo che il progresso è di 100, ma il mio Webview non è caricato.
C'è un altro modo per essere sicuri che il mio Webview sia caricato al 100%?

  • Salvataggio su scheda SD come file di text
  • Come ruotare TextView senza restringere i limiti?
  • Perché non è ansible avviare un AVD da Eclipse con 1024 MB di RAM?
  • Android che support tutte le tavolette - categorizza disegni e layout
  • Non in grado di aggiungere una vista vuota al di sotto di Recyclerview
  • come mettere in pausa e riprendere un thread surfaceView
  • Questa è una parte del mio codice:

     sdk.getWebView().loadDataWithBaseURL("notreal/", data_html,MIME_TYPE,ENCODING_UTF_8,null); Timer timer = new Timer(); TimerTask task = new TimerTask() { @Override public void run(){ Log.i("TAG", "progress fin = "+sdk.getWebView().getProgress()); if(sdk.getWebView().getProgress() <100){ //cancel the webView sdk.getContext().runOnUiThread(new Runnable() { @Override public void run() { sdk.getImgView().setVisibility(View.VISIBLE); sdk.getWebView().setVisibility(View.GONE); } }); } // else ,the Webview is loaded else{ //prepare webview sdk.getContext().runOnUiThread(new Runnable() { @Override public void run(){ // hide imageView sdk.getImgView().setVisibility(View.GONE); sdk.getWebView().setVisibility(View.VISIBLE); } }); } } }; timer.schedule(task, 5000); 

  • ionic update-notifier-cordova.json 'Non hai accesso a questo file
  • Come aggiungere la tua applicazione all'elenco "condividi questo posto" nelle mappe di Google
  • Come get la mia posizione cambiato l'evento con Google Maps Android API v2?
  • Bordo sbiadito di Android ScrollView
  • Integrare / incorporare flash in applicazioni Android? Possibile?
  • Rileva le modifiche di "Blocca la scheda SIM" in Impostazioni / Sicurezza / Imposta block della scheda SIM
  • 5 Solutions collect form web for “Come posso sapere che il mio WebView è caricato al 100%?”

    Come detto qui: Come ascoltare un WebView che finisce caricando un URL?

     boolean loadingFinished = true; boolean redirect = false; mWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String urlNewString) { if (!loadingFinished) { redirect = true; } loadingFinished = false; view.loadUrl(urlNewString); return true; } @Override public void onPageStarted(WebView view, String url, Bitmap facIcon) { loadingFinished = false; //SHOW LOADING IF IT ISNT ALREADY VISIBLE } @Override public void onPageFinished(WebView view, String url) { if(!redirect){ loadingFinished = true; } if(loadingFinished && !redirect){ //HIDE LOADING IT HAS FINISHED } else{ redirect = false; } } }); 

    È necessario sovrascrivere l' onPageFinished di WebViewClient

    Ecco un esempio per te

     private class Callback extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); //do what you want to do } } 

    È ansible provare a estendere WebChromeClient, sovrascrivere onProgressChanged(WebView view, int newProgress) e registrarla sul WebView con il setWebChromeClient(WebChromeClient) . Questo libererà l'applicazione dal thread aggiuntivo che si sta avviando solo per verificare se il progresso è stato modificato. Utilizza il richiamo, è più semplice. Quindi questa sarebbe la prima cosa.

    Un altro è che stavo sperimentando anche questo stato di avanzamento e sono giunto alcune conclusioni su come si comport:

    • per alcuni casi di utilizzo (come controllare se la pagina è anche sotto l'url dato) deve essere maggiore di 10. Quando WebView fa la connessione all'URL fornito, quindi imposta automaticamente il valore di avanzamento a 10 anche se non ha fatto una connessione di successo, se è maggiore di 10, allora puoi essere sicuri di poter accedere all'URL e il caricamento è iniziato,
    • i progressi verranno restituiti come 100% quando si chiama stopLoading() sul WebView,
    • tenendo premuto il punto precedente anche quando WebView non sarà in grado di caricare il sito completo (otterrà un timeout per un'image ad esempio) quindi segnalerà che la pagina è stata completamente caricata (100%)

    In sintesi, questa barra di avanzamento è un indicatore se WebView ha finito di caricare il sito o no ma in termini di WebKit non in termini di pagina completamente scaricati. È necessario tenere presente che la connessione potrebbe bloccarsi, le risorse (immagini, css, js) potrebbero non essere caricate per qualche motivo, JavaScript può caricare altre risorse quando la pagina finirà di caricamento, ecc. Questo progresso non può dirvi se i siti il contenuto è stato completamente caricato o no, ti dice che WebView pensa che questo dovrebbe essere tutto.

    Non ho altre idee su come verificare se la pagina è stata completamente caricata o no, penso che questo è l'unico modo.

    Sopra le soluzioni non funzionava per me, ho voluto assicurarmi che ho pagato la pagina al 100% e poi inietti il ​​javascript per fare una ricerca intensiva sulla pagina. Ho trovato la seguente soluzione con scarsa deviazione dalla soluzione fornita da NeTeInStEiN. Questo potrebbe non funzionare per tutti, ma ha funzionato per me. Ancora dipende da ciò che stai cercando di get dalla pagina finita.

     String url; is from your activity which want to load this url private class ExtendedWebViewClient extends WebViewClient { private int webViewPreviousState; private final int PAGE_STARTED = 0x1; private final int PAGE_REDIRECTED = 0x2; public void onPageStarted(WebView paramWebView, String paramString, Bitmap paramBitmap) { super.onPageStarted(paramWebView, paramString, paramBitmap); if(paramString.contentEquals(url)) { webViewPreviousState = PAGE_STARTED; } else { webViewPreviousState = PAGE_REDIRECTED; } // DO YOU STUFF IF NEEDED } public void onPageFinished(WebView paramWebView, String paramString) { if (webViewPreviousState == PAGE_STARTED) { // I AM GETTING HERE WHEN MY PAGE IS LOADED 100% // NOW ITS TIME FOR ME TO RUN JAVASCRIPT FUNCTIONS // DO YOUR STUFF } } 

    Spero che questo ti aiuti.

     webView.setWebChromeClient(new WebChromeClient() { public void onProgressChanged(WebView view, int progress) { if (progress == 100) { //do your task } } }); 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.