Historial anterior de WebView sin redirecciones
Implementé android webview y onKeyDown método para la tecla de nuevo. (Implementa webview.goBack();
)
Mi problema es exactamente similar a la pregunta en este post de abajo (no hay respuestas allí)
- ¿Es posible usar JavaScript para cerrar el navegador Android?
- El primer fotograma del vídeo de fondo no se muestra en Android
- ¿Dónde está el navegador predeterminado en Android 4 derivado de?
- ¿Cómo puedo supervisar y obtener tráfico http en una aplicación Android?
- Abrir el navegador sin barra de direcciones a través de una intención en una aplicación de Android
¿Cómo controlar el historial de Android WebView / la pila trasera?
PROBLEMA – Cuando webview
botón de regreso, webview
selecciona la URL anterior, pero si esa URL era realmente una redirección, entra en este círculo / ciclo vicioso. Si nos fijamos en el cromo o navegador de valores que maneja correctamente la espalda sin volver a los redireccionamientos.
¿Cómo se puede resolver esto?
Ejemplo: ir a gap.com. A continuación, seleccione "Mi tarjeta de crédito Gap". Esto abre un vínculo de redirección y luego la página final. Ahora cuando hago clic de nuevo, nunca va a la página principal de Gap.com.
Alguna sugerencia…
Información adicional: implementé el shouldOverrideUrlLoading
. Si elimino ese método, parece que funciona bien, pero con este método no …
- Emulador de Android: el mensaje de error "Desafortunadamente, el navegador dejó de funcionar"
- Abrir navegador con la última URL visitada
- El botón de retroceso después de que el deeplink entre en la aplicación no vuelve a donde vino
- ¿Puede la página web estar consciente del teclado virtual android
- Obtener el historial de WebView de WebBackForwardList
- No se pudo iniciar la aplicación llamando a una URL desde el navegador de Android
- Javascript encuentra la diferencia entre Chrome y Dolphin
- JPlayer jPlayerAndroidFix no funciona?
Acabo de probar esto en jellybean y parece que funciona.
Esencialmente, siempre que una nueva URL se carga en el WebView mantener una copia de la url.
En la siguiente solicitud de URL, compruebe que ya no estamos en esta página, si es así, vuelva a ingresar en el historial de webview otro paso.
Esencialmente esto es depender de la url pasado en el paso de anulación que es la URL redireccionada, en lugar de la url redireccionada final.
public class MainActivity extends Activity { private Button mRefreshButton; private WebView mWebView; private String mCurrentUrl; public void onCreate(Bundle savedInstance) { super.onCreate(savedInstance); setContentView(R.layout.main); mWebView = (WebView) findViewById(R.id.webview); mRefreshButton = (Button) findViewById(R.id.refresh); mRefreshButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mWebView.reload(); } }); WebSettings webSettings = mWebView.getSettings(); webSettings.setJavaScriptEnabled(true); mWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if(mCurrentUrl != null && url != null && url.equals(mCurrentUrl)) { mWebView.goBack(); return true; } view.loadUrl(url); mCurrentUrl = url; return true; } }); mWebView.loadUrl("http://www.gap.com/"); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(event.getAction() == KeyEvent.ACTION_DOWN) { switch(keyCode) { case KeyEvent.KEYCODE_BACK: if(mWebView.canGoBack()){ mWebView.goBack(); return true; } break; } } return super.onKeyDown(keyCode, event); } }
Espero que esta respuesta si alguien todavía está buscando it.I había sido la caza para solucionar problemas similares en mi proyecto y había intentado múltiples enfoques como usar – WebView.HitTestResult – Empujar las urls en la lista – onKeyDown y así sucesivamente … I Creo que la mayoría de los que funcionaría si su aplicación consiste en sólo webview. Pero mi proyecto tenía una combinación de nativo y webview y maneja algún esquema nativo.
En esencia se encuentra que la clave es cómo anular el método shouldOverrideUrlLoading. Desde que quería que mi aplicación se encarga de algunas de las urls y la webview para manejar algunos de los otros, especialmente la parte posterior handling.I utilizó una bandera para la espalda presiona algo así como ..
@Override public void onBackPressed() { if (mWebView.canGoBack()) { mClient.setIsBackPressed(true); //mClient is an instance of the MyWebviewClient mWebView.goBack(); } else { super.onBackPressed(); } } public class MyWebviewClient extends WebViewClient { private Boolean isBackPressed = false; public void setIsBackPressed(Boolean isBackPressed) { this.isBackPressed = isBackPressed; } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (isBackPressed){ return false; } else { // handle the url by implementing your logic return true; } } @Override public void onPageFinished(WebView view, String url) { isBackPressed = false; super.onPageFinished(view, url); } }
De esta manera, siempre que haya un redireccionamiento al hacer clic de nuevo, entonces devuelve false y por lo tanto se burla del comportamiento de la webview. Al mismo tiempo, asegúrese de que isBackPressed se establece en false después de que la página finalice la carga. Espero que esto ayude !!