2010-01-20 12 views
12

Al incrustar WebView en una aplicación y cargar páginas html, JavaScripts alert()/confirm()/etc. No funcionan.Alerta de JavaScript() no funciona en WebView incorporado

Mirando a su alrededor en la documentación, no hay ajustes relacionados con WebPreferences - lo único que se ve son relacionados WebUIDelegate s -(void)webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame: etc ... pero la aplicación de estas significaría escribir diálogos personalizados para estos que parece bastante redundante ...
No necesito un WebUIDelegate personalizado y me gustaría seguir usando el predeterminado.

Seguramente tiene que haber alguna forma de habilitar simplemente alert() et al, pero ¿cómo?

+0

La documentación de dicho método delegado dice "se toma ninguna acción si no se implementa este método", por lo que parece que haya respondido a su propia pregunta. – smorgan

+0

Lo interpreto como * "No se realiza ninguna acción si configura un WebUIDelegate personalizado que no implementa este método" * - idealmente, ni siquiera quiero establecer mi propio 'WebUIDelegate'. –

Respuesta

5

Resulta que simplemente no hay un conjunto predeterminado WebUIDelegate - Apple parece esperar que todos implementen las mismas características básicas para ellos mismos.

+2

Pero js 'prompt' funciona. Entonces es un poco inconsistente. –

12

Aquí hay un código de muestra que hará el trabajo básico. Sin embargo, debe asegurarse de que este objeto esté registrado como UIDelegate para WebView.

- (void)webView:(WebView *)sender runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame { 
    NSAlert *alert = [[NSAlert alloc] init]; 
    [alert addButtonWithTitle:@"OK"]; 
    [alert setMessageText:message]; 
    [alert runModal]; 
    [alert release]; 
} 
+0

"Sin embargo, debe asegurarse de que este objeto esté registrado como UIDelegate para WebView". Esa pequeña propaganda salvó mi noche. Gracias. – byron