Eu tenho um aplicativo que faz uso extensivo de um WebView. Quando o usuário deste aplicativo não possui conexão com a Internet, aparece uma página dizendo "página da web não disponível" e vários outros textos. Existe uma maneira de não mostrar este texto genérico no meu WebView? Eu gostaria de fornecer meu próprio tratamento de erros.
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();
}
}
Eu descobri que WebView-> clearView não limpa a visualização.
Respostas:
Primeiro crie sua própria página de erro em HTML e coloque-a na pasta de ativos, vamos chamá-la de myerrorpage.html Em seguida, com onReceivedError:
fonte
view.loadUrl("about:blank");
antes de loadUrl para evitar que ele mostre a página de erro por uma fração de segundo.A melhor solução que encontrei é carregar uma página vazia no evento OnReceivedError como este:
fonte
view.loadUrl(noConnectionUrl);
duas vezes (onde noConnectionUrl é o arquivo local com mensagem de erro). Isso também ajudou a não "ver" a página de erro embutida por uma fração de segundo.webView.goBack()
, certifique-se de manipular a condição para esta página em branco. Caso contrário, sua página anterior será carregada e se falhar novamente, você verá esta página em branco novamente.Finalmente, resolvi isso. (Funciona até agora ..)
Minha solução é assim ...
Prepare o layout para mostrar quando ocorreu um erro em vez da página da Web (uma mensagem suja de 'página não encontrada'). O layout possui um botão, "RELOAD" com algumas mensagens de guia.
Se ocorrer um erro, lembre-se de usar booleano e mostre o layout que preparamos.
Aqui está minha fonte completa. Veja isso.
Adição: aqui está o layout ....
fonte
Confira a discussão em Android WebView onReceivedError () . É bastante longo, mas o consenso parece ser que a) você não pode impedir que a página "página da web não disponível" apareça, mas b) você sempre pode carregar uma página vazia depois de obter um onReceivedError
fonte
onReceivedError
não disparar. Ele está disparando corretamente no meu código quando não há conexão com a Internet.Quando o webview está embutido em alguma visualização customizada de tal forma que o usuário quase acredita que está vendo uma visualização nativa e não uma webview, em tal cenário, mostrar o erro "a página não pôde ser carregada" é absurdo. O que eu geralmente faço nessa situação é carregar uma página em branco e mostrar uma mensagem de brinde como abaixo
fonte
Você pode usar uma
GET
solicitação para obter o conteúdo da página e, em seguida, exibir esses dados usando oWebview
, desta forma, você não está usando várias chamadas de servidor. Alternativa que você pode usarJavascript
para verificar aDOM
validade do objeto.fonte
Talvez eu não tenha entendido a pergunta, mas parece que você está dizendo que obtém o retorno de chamada de erro recebido e está apenas perguntando qual é a melhor maneira de não mostrar o erro? Por que você simplesmente não remove a visualização da web da tela e / ou mostra outra visualização em cima dela?
fonte
Aqui encontrei a solução mais fácil. Veja isso..
E aqui está o método isInterentConnection () ...
fonte
Suponho que, se você insistir em fazer isso, poderá apenas verificar se o recurso está lá antes de chamar a função loadURL. Simplesmente substitua as funções e faça a verificação antes de chamar o super ()
OBSERVAÇÃO (talvez fora do tópico): Em http, há um método chamado HEAD que é descrito a seguir:
Este método pode ser útil. De qualquer forma, você o implementa ... verifique este código:
Você pode tentar esta verificação usando
fonte
Gostaria apenas de alterar a página da web para o que você está usando para tratamento de erros:
tudo isso pode ser encontrado em http://developer.android.com/reference/android/webkit/WebView.html
fonte
Tenho trabalhado neste problema de me livrar dessas irritáveis páginas de erro do Google hoje. É possível com o código de exemplo do Android visto acima e em muitos outros fóruns (pergunte como eu sei):
SE você colocá-lo em shouldOverrideUrlLoading () como mais um cliente da web. Pelo menos, isso está funcionando para mim no meu dispositivo 2.3.6. Veremos onde mais funciona mais tarde. Isso só me deprimia agora, tenho certeza. A parte goBack é minha. Você pode não querer.
fonte
Tente isto
fonte
Podemos definir a visibilidade de webView para 0 (view.INVISIBLE) e mostrar alguma mensagem. Este código funciona para meu aplicativo em execução no lolipop.
fonte
Tive que enfrentar esse problema e também tentei resolvê-lo de diferentes perspectivas. Finalmente encontrei uma solução usando um único sinalizador para verificar se ocorreu um erro.
Desta forma, oculto a página sempre que há um erro e mostro-o quando a página é carregada novamente de forma adequada.
Também adicionou um pequeno atraso no caso.
Evitei a solução de carregar uma página vazia, pois não permite que você faça webview.reload () mais tarde, pois adiciona essa nova página no histórico de navegação.
fonte
tente isso shouldOverrideUrlLoading , antes de redirecionar para outro url, verifique se a conexão com a Internet com base na página deve ser carregada ou não.
fonte
substituir seu método WebViewClient
view.loadUrl('about:blank')
tem efeitos colaterais, pois cancela o carregamento do URL original.fonte