iphone uiwebview uiwebviewdelegate

iphone - UIWebView: los métodos de delegado webViewDidStartLoad/webViewDidFinishLoad no se llaman cuando se cargan ciertas URL



uiwebviewdelegate (3)

Esta no es una buena solución, pero estoy usando NSTimer para actualizar el estado de los botones:

- (BOOL)webView:(UIWebView *)_webview shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { if (!_timer && [request.URL.absoluteString rangeOfString:@"youtube.com"].length != 0) { _timer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(checkNavigationStatus) userInfo:nil repeats:YES]; } return YES; } //.... //.... //.... - (void)checkNavigationStatus { // Check if we can go forward or back backButton.enabled = self.webView.canGoBack; forwardButton.enabled = self.webView.canGoForward; }

Tengo un navegador web básico implementado usando un UIWebView . Me he dado cuenta de que, en algunas páginas, no se llama a ninguno de los métodos UIWebViewDelegate .

Una página de ejemplo en la que sucede esto es: http://www.youtube.com/user/google . Estos son los pasos para reproducir el problema (asegúrese de insertar NSLog llamadas NSLog en los métodos UIWebViewDelegate su controlador):

  1. Cargue la URL de YouTube anterior en UIWebView [observe que aquí, los métodos UIWebViewDelegate se llaman cuando se carga la página]
  2. Toca la categoría "Subidas" en la página
  3. Toque cualquier video en esa categoría [ problema: note que se carga una nueva página, pero no se llama a ningún delegado de UIWebView]

Sé que esto no es un problema de que el UIWebView de UIWebView no se haya configurado correctamente, ya que los métodos de delegado se invocan cuando se cargan otros enlaces (por ejemplo, si intenta hacer clic en un enlace que lo lleva fuera de YouTube, verá que métodos de delegado siendo llamados).

Mi intuición al principio fue que podría deberse a que la página se carga con AJAX, que puede no invocar el método de delegado. Pero luego, cuando revisé el Safari del iPhone, no presentaba este problema, por lo que debe ser algo de mi parte.

También me he dado cuenta de que el TTWebController de TTWebController tiene el mismo problema que tengo.

Pero el problema que surge de este problema es que sin los métodos de delegación llamados, no puedo actualizar la interfaz de usuario para habilitar / deshabilitar los botones de navegación hacia atrás y hacia adelante cuando se cargan nuevas solicitudes.

¿Y la idea de por qué sucede esto o cómo puedo solucionarlo para actualizar la interfaz de usuario cuando se realiza una nueva solicitud?


Esto no es un error de iOS, la página no se está recargando. Los delegados de UIWebView se activan después de nuevas solicitudes de página, pero esa página no lo hace.

Mire con mucho cuidado lo que sucede en el escritorio de Safari cuando hace clic en el enlace del video en esa página como lo describe. Asegúrate de prestar atención a la barra de direcciones. La dirección cambiará, pero críticamente la página no se volverá a cargar .

Todo esto es manejado por JavaScript, no por recargar la página. En pocas palabras, la página nunca se vuelve a cargar, por lo que no hay razón para que se llame a los delegados de UIWebView .

Si no me cree, pruebe de manera concluyente este intento repitiendo los pasos que describe con JavaScript desactivado. Notarás que la página se comporta de manera completamente diferente.


Parece que esto se ha solucionado en iOS 4.2. Funciona en iOS 4.2.