Est-il possible d'utiliser stringByEvaluatingJavaScriptFromString avec Javascript qui fait référence à des fichiers locaux?

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

Question

Je veux utiliser stringByEvaluatingJavaScriptFromString pour exécuter un javascript qui fait référence à des fichiers locaux (dans ce cas les fichiers css, mais les fichiers potentiellement js aussi) qui se trouvent sur le périphérique (dans le dossier Documents je suppose?) ...

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

Comment puis-je obtenir ce travail? Il fonctionne très bien si j'utilise un fichier CSS externe, comme

the_css.href='http://www.website.com/the_css.css';
Était-ce utile?

La solution

Qu'est-ce que je l'ai fait dans le passé est utilisé ce code lors du chargement du HTML

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

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

passera l'emplacement du paquet comme l'URL de base qui devrait provoquer vos urls par rapport à fonctionner correctement. Bien sûr, vous ne devez pas utiliser cette méthode de loadData exacte, il y a différentes surcharges. Procurez-vous le baseUrl là-bas et vous devriez être bon d'aller.

Si tout le reste échoue, vous pouvez utiliser quelque chose comme:

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

Et injecter que dans la page avec quelques remplacements de chaîne ou autre chose. Bit hacky bien.

Autres conseils

Vous devriez le faire comme ça.

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

Espérons que cela va résoudre le problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top