Ist es möglich, stringByEvaluatingJavaScriptFromString mit Javascript zu verwenden, die lokalen Dateien verweist?
-
19-09-2019 - |
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';
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.