¿Es posible utilizar stringByEvaluatingJavaScriptFromString con Javascript que hace referencia a los archivos locales?

StackOverflow https://stackoverflow.com/questions/1893715

Pregunta

Quiero usar stringByEvaluatingJavaScriptFromString para ejecutar un JavaScript que hace referencia a los archivos locales (en este caso los archivos CSS, pero los archivos potencialmente js también) que están en el dispositivo (en la carpeta Documentos supongo?) ...

 NSString *theJS = [[NSString alloc]
 initWithString:@"javascript:(function()
{the_css.rel='stylesheet';
the_css.href='the_css.css';
the_css.type='text/css';
the_css.media='screen';}
)();"];

[webView stringByEvaluatingJavaScriptFromString:theJS];

¿Cómo puedo conseguir que esto funcione? Funciona bien si uso un archivo CSS externo, como

the_css.href='http://www.website.com/the_css.css';
¿Fue útil?

Solución

Lo que he hecho en el pasado se utiliza este código al cargar el código HTML

NSString *bundlePath = [[NSBundle mainBundle] bundlePath];
NSURL *baseURL = [NSURL fileURLWithPath:bundlePath];

[webView loadData:data MIMEType:@"text/html" textEncodingName:@"utf-8 " baseURL:baseURL];

Esto pasará la ubicación haz que la URL base que debería hacer que los URL relativos a trabajar correctamente. Por supuesto que no tiene que utilizar este método loadData exacta, hay varias sobrecargas. Acaba de obtener el baseUrl allí y usted debe ser bueno para ir.

Si todo lo demás falla, puede usar algo como:

NSString *path = [[NSBundle mainBundle] pathForResource:@"file.css" ofType:nil]]

e inyectar eso en la página con algunos reemplazos de cadenas o lo que sea. Poco hacky sin embargo.

Otros consejos

Debe hacerlo de esta manera.

NSString *cssPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"the_css.css"];
NSURL *baseURL = [NSURL fileURLWithPath:cssPath];


 NSString *theJS = [[NSString alloc]
 initWithFormat:@"javascript:(function()
{the_css.rel='stylesheet';
the_css.href='%@';
the_css.type='text/css';
the_css.media='screen';}
)();",baseURL];
[cssPath release];

[webView stringByEvaluatingJavaScriptFromString:theJS];

Espero que esto va a resolver el problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top