2010-02-20 12 views
13

Puede deshabilitar Javascript tanto en Safari móvil como en WebView de Cocoa, pero no veo ninguna forma de hacerlo en UIWebView.UIWebView: ¿Puedes desactivar Javascript?

¿Es correcto?

Pregunto en relación a esta pregunta regarding obtaining the title of page displayed in an UIWebView usando Javascript. Me preocupaba que fallara si Javascript estaba deshabilitado, pero parece que la API no permite la deshabilitación de Javascript.

Si Javascript no puede desactivarse UIWebView, eso hace que mi pregunta anterior no coincida.

+0

Para iOS 8 en adelante (por comentario eliminado): "Hay una forma de hacerlo si está utilizando WKWebView nuevo en lugar de UIWebView. Esto se responde aquí. Http://stackoverflow.com/a/34404676/1239426 " – BadPirate

Respuesta

9

No hay API pública para deshabilitar Javascript. Por lo tanto, es bastante seguro suponer que no se desactivará.

12

¡Hay una manera! Utilizando el Content Security Policy que se apoya parcialmente en iOS 5.1 o posterior, y una cabecera personalizada:

X-WebKit-CSP: script-src none; 

Se nota que el UIWebKit para no permitir javascript en la página por completo. (o selectivamente solo permite secuencias de comandos de un dominio específico, más información en spec.

Para hacer esto desde un servidor que usted controla, deberá modificar los encabezados de respuesta de la página para incluir X-WebKit-CSP encabezado ... Para hacerlo desde páginas locales (texto sin formato o datos HTML en el dispositivo), deberá definir y registrar un NSURLProtocol personalizado para cargar su página, y enviar el encabezado en su NSHTTPURLResponse elaborado:

NSDictionary *headers = [NSDictionary dictionaryWithObjectsAndKeys: 
         @"script-src none",@"X-WebKit-CSP", 
         @"text/html",@"Content-type", 
         encoding,@"Content-encoding", 
         nil]; 
NSHTTPURLResponse *urlResponse = [[NSHTTPURLResponse alloc] initWithURL:self.request.URL 
                 statusCode:200 
                 HTTPVersion:@"1.1" 
                 headerFields:headers]; 
[self.client URLProtocol:self didReceiveResponse:urlResponse cacheStoragePolicy:NSURLCacheStorageAllowedInMemoryOnly]; 
+0

Funciona muy bien para yo, gracias! – Ponf

+0

Lamentablemente, este no funciona con iframes.