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í)

¿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 …

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 !!

  • ¿Cómo puedo acceder a mi localhost a través del teléfono Android?
  • ¿Cómo bloquear algunas url en el navegador Android?
  • ¿Qué navegador utiliza el Samsung Galaxy?
  • ¿Hay formas de incrustar un navegador en la aplicación para Android?
  • Cómo depurar un sitio web en Android?
  • Android: lanzar google map a través de url web
  • ¿Es posible desplazar divs en Chrome para Android?
  • ¿Cómo registrar un espacio de nombres de URL (myapp: //app.start/) para acceder a su programa llamando a una URL en el navegador en Android OS?
  • Cómo acceder al almacenamiento local del navegador android a través del código nativo
  • Onsen-UI usando el menú deslizante con el navegador
  • ¿Cómo cambiar la página principal del navegador Android predeterminado dentro de una aplicación?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.