Ist es möglich, stringByEvaluatingJavaScriptFromString mit Javascript zu verwenden, die lokalen Dateien verweist?

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

Frage

Ich möchte stringByEvaluatingJavaScriptFromString verwenden, um eine Javascript auszuführen, die lokale Dateien verweist (in diesem Fall CSS-Dateien, aber möglicherweise js Dateien auch), die auf dem Gerät sind (in den Ordner Dokumente Ich denke?) ...

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

Wie würde ich dies funktioniert? Es funktioniert gut, wenn ich eine externe CSS-Datei verwenden, wie

the_css.href='http://www.website.com/the_css.css';
War es hilfreich?

Lösung

Was ich in der Vergangenheit verwendet wird, diesen Code getan haben, wenn die HTML-Laden

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

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

Dies wird das Bündel Lage als Basis-URL weiterleiten, die die relative URLs führen sollten ordnungsgemäß funktionieren. Natürlich nicht genau diese loadData Methode verwenden, müssen Sie, gibt es verschiedene Überlastungen. Nehmen Sie einfach die baseUrl da drin, und Sie sollten gut gehen.

Wenn alle Stricke reißen Sie so etwas wie verwenden können:

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

Und injiziert, die in der Seite mit einigem Zeichenfolge Ersatz oder was auch immer. Bit Hacky though.

Andere Tipps

Sie sollten es so machen.

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

Hope dies wird das Problem lösen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top