Inyección UIWebView CSS usando JavaScript

Estoy intentando inyectar un file CSS local en un UIWebView que terminó de cargar el website, como Google, etc.

Estoy intentando con JavaScript pero sin éxito.

- (void)webViewDidFinishLoad:(UIWebView *)webView { NSString *cssPath = [[NSString alloc] initWithString:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"styles.css"]]; NSURL *baseURL = [NSURL fileURLWithPath:cssPath]; NSString *js = [NSString stringWithFormat:@"var fileref = document.createElement('link'); fileref.setAttribute('rel', 'stylesheet'); fileref.setAttribute('type', 'text/css'); fileref.setAttribute('href', %@);", baseURL]; [webView stringByEvaluatingJavaScriptFromString:js]; } 

Gracias,

Para inyectar javascript en una vista web, debe escribir explícitamente en el html.

Un ejemplo de esto es aquí donde escribí en una function javascript scrollTo:

 - (void)webViewDidFinishLoad:(UIWebView *)webView { [webView stringByEvaluatingJavaScriptFromString:@"var script = document.createElement('script');" "script.type = 'text/javascript';" "script.text = \"function myFunction() { " "window.scrollTo(100,100)" "}\";" "document.getElementsByTagName('head')[0].appendChild(script);"]; [webView stringByEvaluatingJavaScriptFromString:@"myFunction();"];} 

Este código escribe las tags de script completas y la function myFunction en la cabecera del HTML

Yo tenía una necesidad similar. Tengo files html locales en el package que quería cambiar los attributes css de forma progtwigda. Como no puedes cambiar los files del package, quería inyectar mi CSS en el momento de carga de las variables en la aplicación.

El código a continuación demuestra la técnica, simplemente sustituya su método para get el css, es decir, lea de un file, plist, código o db.

 - (void)webViewDidFinishLoad:(UIWebView *)webView { NSString* css = @"\"@font-face { font-family: 'Chalkboard'; src: local('ChalkboardSE-Regular'); } body { background-color: #F0F0FC; color: #572B00; font-family: Chalkboard;} a { color: #A00; text-decoration: none;}\""; NSString* js = [NSString stringWithFormat: @"var styleNode = document.createElement('style');\n" "styleNode.type = \"text/css\";\n" "var styleText = document.createTextNode('%@');\n" "styleNode.appendChild(styleText);\n" "document.getElementsByTagName('head')[0].appendChild(styleNode);\n",css]; NSLog(@"js:\n%@",js); [self.webView stringByEvaluatingJavaScriptFromString:js]; } 

Te sugiero que crees un file js y lo agregues a tu file de proyecto.

 NSString *filePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"js"]; NSData *fileData = [NSData dataWithContentsOfFile:filePath]; NSString *jsString = [[NSString alloc] initWithData:fileData encoding:NSUTF8StringEncoding]; 

y sabes cómo llamar a js en un file html. esta es la forma más simple y limpia de hacerlo.