É possível usar stringByEvaluatingJavaScriptFromString com Javascript que faz referência a arquivos locais?

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

Pergunta

Eu quero usar stringByEvaluatingJavaScriptFromString para executar um javascript que faz referência a arquivos locais (neste arquivos CSS caso, mas potencialmente js arquivos também) que estão no dispositivo (na pasta Documentos eu acho?) ...

 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];

Como eu poderia chegar a este trabalho? Ele funciona muito bem se eu usar um arquivo CSS externo, como

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

Solução

O que eu fiz no passado é usado este código ao carregar o HTML

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

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

Isso vai passar a localização pacote como o URL base que deve fazer com que seus URLs relativos para funcionar corretamente. Claro que você não tem que usar este método loadData exata, existem várias sobrecargas. Basta chegar a baseUrl lá e você deve ser bom para ir.

Se tudo mais falhar, você pode usar algo como:

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

e injetar que dentro da página com algumas substituições de corda ou qualquer outra coisa. Bit embora hacky.

Outras dicas

Você deve fazê-lo assim.

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 isso vai resolver o problema.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top