Inyección de CSS en UIWebView usando JavaScript

Estoy intentando inyectar un file CSS local para anular el estilo de una página web. La página web se presenta en un contenedor UIWebView en iOS. Sin embargo, no puedo hacer que mi código funcione. Mira el fragment de mi método de delegado a continuación. Este código se ejecuta (puedo ver el post NSLog ), pero no veo los resultados de su ejecución en la página.

Sé que no puede ser el CSS que escribí porque en este caso tomé las páginas propias del file CSS y simplemente cambié algunos colors. (Para probar este método)

 -(void)webViewDidFinishLoad:(UIWebView *)webView { NSString *path = [[NSBundle mainBundle] bundlePath]; NSString *cssPath = [path stringByAppendingPathComponent:@"reader.css"]; NSString *js = [NSString stringWithFormat:@"var headID = document.getElementsByTagName('head')[0];var cssNode = document.createElement('link');cssNode.type = 'text/css';cssNode.rel = 'stylesheet';cssNode.href = '%@';cssNode.media = 'screen';headID.appendChild(cssNode);", cssPath]; [webView stringByEvaluatingJavaScriptFromString:js]; NSLog(@"webViewDidFinishLoad Executed"); } 

Tu solución no funcionará porque

  1. su cssNode.href debe ser una URL (es decir, escapada y con un prefijo con file:// ), no una ruta
  2. Safari no le permite cargar files locales desde una página remota, ya que es un riesgo de security.

En el pasado lo hice descargando el HTML usando una NSURLConnection, y luego agregando una label <style> en el encabezado HTML. Algo como:

 NSString *pathToiOSCss = [[NSBundle mainBundle] pathForResource:@"reader" ofType:@"css"]; NSString *iOSCssData = [NSString stringWithContentsOfFile:pathToiOSCss encoding:NSUTF8StringEncoding error:NULL]; NSString *extraHeadTags = [NSString stringWithFormat:@"<style>%@</style></head>", iOSCssData]; html = [uneditedHtml stringByReplacingOccurrencesOfString:@"</head>" withString:extraHeadTags]; [webView loadHTMLString:html baseURL:url];