2011-10-15 15 views
6

He agregado una aplicación WebView a Cocoa y estoy tratando de averiguar qué delegado puedo usar para detectar cuándo cambia la navegación (el usuario hace clic en un enlace o los incendios de JavaScript para cambiar la ubicación, etc.).Cocoa WebKit/WebView delegado para cambio de ubicación? (Usuario hizo clic en el enlace, acción de JavaScript, etc.)

El WebView class reference contiene cuatro delegados (WebFrameLoadDelegate Protocolo de referencia, WebPolicyDelegate Protocolo de referencia, WebResourceLoadDelegate Protocolo de Referencia y WebUIDelegate Protocolo de referencia) y me han mirado a cada uno de ellos, pero me parece que no puede encontrar la forma de detectar esto. ¿Me estoy perdiendo algo descaradamente obvio o no hay forma de obtener esto?

tldr - Tratando de averiguar cómo puedo configurar un delegado para obtener un evento cuando el WebView está cambiando la URL. (Específicamente, necesito saber cuál es la nueva URL).

Respuesta

9

El uso de WebKit (es decir, MacOS X), entonces probablemente el mejor lugar para realizar un seguimiento de las solicitudes está en webView:identifierForInitialRequest:fromDataSource:, aunque webView:resource:willSendRequest:redirectResponse:fromDataSource: también es bueno, y tiene la ventaja de que le permite modificar la solicitud.

Al igual que con iOS, puede usar [request URL].

Establecer esto a través de [webView setResourceLoadDelegate:self];.

El delegado de carga de recursos (como el anterior) da mejores opciones para manejar la solicitud, en mi opinión, que los métodos delegados de política.

-1

Implementar

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { 
    return YES; 
} 

y probar el tipo de navegación dentro del cuerpo. Su clase debe establecerse como delegado de la vista web e implementar el protocolo UIWebViewDelegate. La URL se puede obtener de la solicitud:

[request URL] 
+3

Gracias, pero este desarrollo de Mac utiliza la clase WebView y no la clase UIWebView de iOS. – Kyle

+0

Dejando esto (incorrecto, para esta situación) responda, ya que los programadores de iOS pueden llegar aquí con esta pregunta exacta. –

5

recomiendo a implementar estos dos métodos WebPolicyDelegate:

-webView:decidePolicyForNavigationAction:request:frame:decisionListener: 
-webView:decidePolicyForNewWindowAction:request:newFrameName:decisionListener: 

Que le dirá la nueva URL siendo navegado, pero también le dará la oportunidad de cambiar el comportamiento predeterminado. p.ej. Es posible que WebKit no intente abrir ventanas nuevas.

Cuestiones relacionadas