J'ai une application qui utilise largement une WebView. Lorsque l'utilisateur de cette application n'a pas de connexion Internet, une page indiquant «page Web non disponible» et divers autres textes apparaissent. Existe-t-il un moyen de ne pas afficher ce texte générique dans ma WebView? Je voudrais fournir ma propre gestion des erreurs.
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 que WebView-> clearView n'efface pas réellement la vue.
Réponses:
Créez d'abord votre propre page d'erreur en HTML et placez-la dans votre dossier assets, appelons-la myerrorpage.html Puis avec onReceivedError:
la source
view.loadUrl("about:blank");
avant loadUrl pour l'empêcher d'afficher la page d'erreur pendant une fraction de seconde.La meilleure solution que j'ai trouvée est de charger une page vide dans l'événement OnReceivedError comme ceci:
la source
view.loadUrl(noConnectionUrl);
deux fois (où noConnectionUrl est un fichier local avec un message d'erreur). Cela a également aidé à ne pas «voir» la page d'erreur intégrée pendant une fraction de seconde.webView.goBack()
assurez-vous de gérer la condition de cette page vierge. Sinon, votre page précédente sera chargée et en cas d'échec à nouveau, vous verrez à nouveau cette page vierge.Enfin, j'ai résolu ce problème. (Cela fonctionne jusqu'à présent ..)
Ma solution est comme ça ...
Préparez la mise en page pour afficher lorsqu'une erreur s'est produite au lieu de la page Web (un 'message de page introuvable' sale) La mise en page a un bouton, "RELOAD" avec quelques messages de guide.
Si une erreur s'est produite, n'oubliez pas d'utiliser boolean et affichez la mise en page que nous préparons.
Voici ma source complète. Regarde ça.
Ajout: Voici la mise en page ...
la source
Consultez la discussion sur Android WebView onReceivedError () . C'est assez long, mais le consensus semble être que a) vous ne pouvez pas empêcher la page "page Web non disponible" d'apparaître, mais b) vous pouvez toujours charger une page vide après avoir obtenu une erreur onReceivedError
la source
onReceivedError
ne pas déclencher du tout. Il se déclenche correctement dans mon code lorsqu'il n'y a pas de connexion Internet.Lorsque la vue Web est intégrée dans une vue personnalisée de telle sorte que l'utilisateur croit presque voir une vue native et non une vue Web, dans un tel scénario, il est absurde de voir l'erreur «La page n'a pas pu être chargée». Ce que je fais habituellement dans une telle situation, c'est de charger une page vierge et d'afficher un message toast comme ci-dessous
la source
Vous pouvez utiliser une
GET
demande pour obtenir le contenu de la page, puis afficher ces données à l'aide deWebview
, de cette façon, vous n'utilisez pas plusieurs appels de serveur. Alternative que vous pouvez utiliserJavascript
pour vérifier laDOM
validité de l' objet.la source
Peut-être ai-je mal compris la question, mais il semble que vous dites que vous recevez un rappel d'erreur et que vous demandez simplement quelle est la meilleure façon de ne pas afficher l'erreur? Pourquoi ne supprimez-vous pas simplement la vue Web de l'écran et / ou n'affichez-vous pas une autre vue par-dessus?
la source
Ici, j'ai trouvé la solution la plus simple. Regarde ça..
Et voici la méthode isInterentConnection () ...
la source
Je suppose que si vous insistez pour faire cela, vous pouvez simplement vérifier si la ressource est là avant d'appeler la fonction loadURL. Remplacez simplement les fonctions et faites la vérification avant d'appeler le super ()
REMARQUE (peut-être hors sujet): Dans http, il existe une méthode appelée HEAD qui est décrite comme suit:
Cette méthode peut être pratique. Quoi qu'il en soit, comment jamais vous l'implémentez ... vérifiez ce code:
Vous pouvez essayer cette vérification en utilisant
la source
Je changerais simplement la page Web en ce que vous utilisez pour la gestion des erreurs:
tout cela peut être trouvé sur http://developer.android.com/reference/android/webkit/WebView.html
la source
J'ai travaillé sur ce problème d'abandon de ces pages d'erreur Google irritables aujourd'hui. C'est possible avec l'exemple de code Android vu ci-dessus et dans de nombreux autres forums (demandez comment je sais):
SI vous le mettez dans shouldOverrideUrlLoading () en tant que client Web de plus. Au moins, cela fonctionne pour moi sur mon appareil 2.3.6. Nous verrons où cela fonctionne plus tard. Cela ne ferait que me déprimer maintenant, j'en suis sûr. Le bit goBack est à moi. Vous n'en voulez peut-être pas.
la source
Essaye ça
la source
Nous pouvons définir la visibilité de webView sur 0 (view.INVISIBLE) et afficher un message. Ce code fonctionne pour mon application fonctionnant sur lolipop.
la source
J'ai dû faire face à ce problème et j'ai également essayé de le résoudre sous différents angles. Enfin, j'ai trouvé une solution en utilisant un seul indicateur pour vérifier si une erreur s'est produite.
De cette façon, je cache la page à chaque fois qu'il y a une erreur et je l'affiche lorsque la page s'est à nouveau chargée correctement.
Ajout d'un petit délai au cas où.
J'ai évité la solution de charger une page vide car elle ne vous permet pas de faire webview.reload () plus tard car elle ajoute cette nouvelle page dans l'historique de navigation.
la source
essayez ceci shouldOverrideUrlLoading , avant de rediriger vers une autre URL, vérifiez si la connexion Internet basée sur cette page doit être chargée ou non.
la source
remplacer votre méthode WebViewClient
view.loadUrl('about:blank')
a des effets secondaires, car il annule le chargement de l'URL d'origine.la source