Prévenir WebView à partir de l'affichage “page web non disponible”
J'ai une application qui fait un usage intensif d'une WebView. Lorsque l'utilisateur de cette application ne dispose pas de connexion Internet, une page disant: "page web non disponible" et de divers autres types de texte s'affiche. Est-il un moyen de ne pas afficher ce texte générique dans mon WebView? J'aimerais donner ma propre erreur de manipulation.
private final Activity activity = this;
private class MyWebViewClient extends WebViewClient
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
//I need to do something like this:
activity.webView.wipeOutThePage();
activity.myCustomErrorHandling();
Toast.makeText(activity, description, Toast.LENGTH_LONG).show();
}
}
J'ai découvert WebView->clearView ne fait pas clairement la vue.
- Pourquoi ne pas vérifier la connexion internet avant de montrer la webView et si il n'y a pas d'internet disponible, vous pouvez sauter montrant WebView et au lieu de cela, vous pouvez afficher un message d'alerte ou de pain grillé avec de la pas de message internet?
- pouvez-vous cocher une réponse comme correcte ? probablement la mienne 😛
Vous devez vous connecter pour publier un commentaire.
D'abord créer votre propre page d'erreur en HTML et de le placer dans votre dossier des actifs, appelons-la myerrorpage.html
Puis avec onReceivedError:
view.loadUrl("about:blank");
avant loadUrl pour l'empêcher de se montrant page d'erreur pour une fraction de seconde.onReceivedError
est déjà Depricated.La meilleure solution que j'ai trouvé est de charger une page vide dans le OnReceivedError événement comme celui-ci:
view.loadUrl(noConnectionUrl);
deux fois (où noConnectionUrl est fichier local avec le message d'erreur). Qui a également contribué à ne pas "voir" intégré dans la page d'erreur pour une fraction de seconde.webView.goBack()
alors assurez-vous de manipuler condition pour que cette page blanche. Sinon, votre page précédente sera chargé et en cas d'échec à nouveau, puis vous allez voir cette page vide à nouveau.Enfin, j'ai résolu ce problème. (Il travaille jusqu'à maintenant..)
Ma solution est comme ça...
Préparer la mise en page à afficher en cas d'erreur au lieu de la Page Web (un sale 'page non trouvée message') a La mise en page un bouton "RECHARGER", avec un guide de messages.
Si une erreur s'est produite, Rappelez-vous à l'aide de booléens et de montrer la mise en page nous préparer.
Voici ma source complet. Vérifier cela.
Plus:Ici est la mise en page....
Découvrez la discussion à Android WebView onReceivedError(). C'est assez long, mais le consensus semble être que a) vous ne pouvez pas arrêter la "page web non disponible" à la page qui apparaît, mais b) vous pouvez toujours charger une page vide après que vous obtenez une onReceivedError
onReceivedError
pas de déclenchement à tous. C'est le déclenchement correctement dans mon code quand il n'y a pas de connexion Internet.Quand webview est incorporé dans certaines affichage personnalisé de telle sorte que l'utilisateur croit presque qu'il est de voir un natif de vue et pas une webview, dans un tel scénario montrant la "page n'a pas pu être chargé" d'erreur est absurde. Ce que j'ai l'habitude de faire dans une telle situation c'est que je charge page blanche et de montrer un toast message comme ci-dessous
Vous pouvez utiliser un
GET
demande pour obtenir le contenu de la page et afficher des données à l'aide de laWebview
, de cette façon, vous n'êtes pas à l'aide de plusieurs appels au serveur. Alternative, vous pouvez utiliserJavascript
pour vérifier laDOM
objet pour en déterminer la validité.Peut-être que j'ai mal compris la question, mais il semble que vous êtes en train de dire que vous obtenez le message d'erreur reçu de rappel, et vous le demandez quel est le meilleur moyen de ne pas afficher l'erreur? Pourquoi ne pas simplement supprimer l'affichage web à partir de l'écran et/ou de montrer un autre point de vue sur le dessus de celui-ci?
Je suppose que si vous insistez sur le fait de faire cela, vous avez juste à vérifier si la ressource est là, avant d'appeler la loadURL fonction.
Tout simplement remplacer les fonctions et faire le check avant l'appel à super()
REMARQUE (peut-être hors-sujet): En http, il existe une méthode appelée la TÊTE qui est décrit comme suit:
Cette méthode peut être utile.
De toute façon comment jamais vous la mettre en œuvre ... regardez ce code:
Vous pouvez essayer ce vérifiez à l'aide
Ici, j'ai trouvé la solution la plus simple. découvrez ce..
Et voici isInterentConnection() la méthode...
Je voudrais juste changer la page web que vous utilisez pour la gestion des erreurs:
cela peut être trouvé sur http://developer.android.com/reference/android/webkit/WebView.html
J'ai travaillé sur ce problème de l'amerrissage ceux irritable Google des pages d'erreur aujourd'hui. Il est possible avec Android un exemple de code vu ci-dessus et dans beaucoup d'autres forums (demandez comment je le sais):
SI vous le mettez dans shouldOverrideUrlLoading (), comme un webclient. Au moins, c'est de travailler avec moi sur mon 2.3.6 appareil. Nous allons voir où il travaille plus tard. Cela ne ferait que me déprimer, maintenant, j'en suis sûr. Le goBack bits est le mien. Vous ne le voulez.
Essayer cette
Nous pouvons définir la visibilité de webView à 0(point de vue.INVISIBLE) et un certain message.
Ce code fonctionne pour mon application en cours d'exécution sur lolipop.
J'ai eu à faire face à ce problème et j'ai aussi essayé de le résoudre à partir de perspectives différentes. J'ai enfin trouvé une solution à l'aide d'un seul indicateur pour vérifier si une erreur s'est produite.
De cette façon, je me cache de la page à chaque fois il y a une erreur et de le montrer lorsque la page est chargée à nouveau correctement.
Également ajouté un peu de retard dans cas.
J'ai évité la solution de chargement d'une page vide, car il ne permet pas de le faire webview.reload() plus tard à cause d'elle ajoute qu'une nouvelle page dans l'histoire de la navigation.
essayer cette shouldOverrideUrlLoading , avant de les rediriger vers une autre url vérifier pour internet conncetion basée sur cette page doit être chargée ou pas.
remplacer votre WebViewClient méthode
view.loadUrl('about:blank')
a des effets secondaires, comme il annule l'URL d'origine de chargement.