12
votes

Onpagefini ne pas tirer correctement lorsque la page Web Rendu web

Pour une raison quelconque, l'onpageFinished tire avant que le webview ait fini de charger - je ne peux pas comprendre pourquoi ...

webView.loadDataWithBaseURL("fake://fake.com/", htmlBody, "text/html", "utf-8", null);


0 commentaires

5 Réponses :


1
votes

hmm, eh bien si je fais ma propre classe privée, cela fonctionne ...

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


1 commentaires

Cela se produit trop tôt, avant que la photo soit rendue



0
votes

Je me fais exactement la même chose avec loadDataWithBaseURL () . Parfois, le contenu ne se présentent pas et la contentHeight est 0. La chose étrange est que partout en cliquant dans la vue Web provoquera le contenu à afficher. De plus, si vous appelez zoomIn (); zoomout (). onPageFinished () , la page apparaît

EDIT: Le problème avec mon code est que le contenu HTML avait une window.location factice = affectation dans l'événement onload, ce qui a été à l'origine du contenu original de ne pas charger à des moments aléatoires. Désolé, je ne pense pas que cela est lié à ce que vous voyez.


0 commentaires

14
votes

J'ai eu un projet qui avait un code qui devait fonctionner uniquement après que le webview avait affiché son contenu, et comme vous, onpagefini () ne fonctionnait pas. Il a tiré trop rapidement, avant que la vision Web ait rendu la page.

Au lieu de cela, je devais utiliser un "pictureRelistener" qui est tiré lorsque la vision de WebView met actuellement la mise à jour de l'écran.

Vous l'utilisez comme si : xxx


5 commentaires

Parfait merci! Je veux juste ajouter que ces incendies surNewpicture, même après la fin d'un événement de défilement terminé, j'ai donc besoin de coder cela, mais ce qui précède fonctionne parfaitement.


Sauf que ceci est maintenant obsolète (Tablet Helr- er - Heaven) :( Donc, j'utilise un appel JavaScript qui correspond le mieux à la liste WebChromeclient ONPROGRESSCHANGED () en termes de temps de retour ... il suffit de prendre soin de ce threffe que vous opérez quand vous obtenez Le retour (j'utilise le gestionnaire de webview avec un appel différé) - tout ce qui étant dit, je vais voir comment webchromeclient.unProgressSchanged () effectue


Y a-t-il une meilleure manière de faire cela


@Dan pouvez-vous élaborer sur votre appel JavaScript? Un extrait de code serait super. Merci et +1 en attendant.


Eh bien, quand j'ai essayé cela, l'application me demande que quelle application voudriez-vous utiliser pour ce site Web "Chrome" ou "Internet". Cela signifie que votre solution ouvre un navigateur externe. Au moins pour moi..



4
votes

J'ai eu le même problème à rejeter mon progressionDialog lors de la rendu de ma page Web. J'ai résolu avec ONPAGESARTED. J'espère que cette solution peut vous aider.

    @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();
        }
    };


1 commentaires

Celui-ci travaille pour moi. J'ai une vision web qui remplace l'URL chargement.



0
votes

Je cherchais littéralement une réponse depuis 6 heures et j'ai finalement trouvé un qui travaille pour moi au moins, et c'est une réponse simple. Une minuterie. Après votre départ à l'ondulée, commencez une minuterie aussi longtemps que vous le souhaitez, dans mon cas, je l'ai fait pendant 2 secondes. Cela aura suffisamment de temps pour que WebView rendit et chargez la page entière. Assurez-vous d'exécuter la minuterie sur le thread d'interface utilisateur si vous souhaitez appeler une méthode WebView xxx

d'ailleurs, c'est ma première réponse sur Stackoverflow. J'espère que cela aide quelqu'un!


0 commentaires