我也遇到了麻烦。
我试图从服务器加载 HTML 文件并使用本地 CSS 文件更改样式。
一开始我用的
[webView loadRequest:reqObj];
当它击中- (void)webViewDidFinishLoad:(UIWebView *)webView 时,我正试图将 CSS 文件作为一个孩子推送到“头部”:
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *cssPath = [path stringByAppendingPathComponent:@"style.css"];
NSString *js = [NSString stringWithFormat:@"var cssChild = document.createElement('link');"
"cssChild = 'text/css';"
"cssChild = 'stylesheet';"
"cssChild = '%@';", cssPath];
js = [NSString stringWithFormat:@"%@ document.getElementsByTagName('head')[0].appendChild(cssChild);", js];
[webView stringByEvaluatingJavaScriptFromString:js];
}
所以......它没有工作......
然后我尝试了
NSString *path = [[NSBundle mainBundle] bundlePath];
NSURL *baseURL = [NSURL fileURLWithPath:path];
[webView loadHTMLString:htmlString baseURL:baseURL];
(我将 HTML 字符串复制到 htmlString 中)然后,在 - (void)webViewDidFinishLoad:(UIWebView *)webView 中,我像上面的代码一样注入了 CSS。它奏效了!
但是...我的 HTML 文件存储在远程服务器中,我没有 HTML 字符串,所以我使用了
NSString* myFile = [NSString stringWithFormat:@"http://blablabla.com/file.html"];
NSString* myFileURLString = [myFile stringByReplacingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
NSData *myFileData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:myFileURLString]];
NSString* myFileHtml = [[[NSString alloc] initWithData:myFileData encoding:NSASCIIStringEncoding] autorelease];
获取 HTML。现在,我在“ myFileHtml ”中有原始 HTML 文本。
我现在使用
NSString *path = [[NSBundle mainBundle] bundlePath];
NSURL *baseURL = [NSURL fileURLWithPath:path];
[webView loadHTMLString:myFileHtml baseURL:baseURL];
并在“webViewDidFinishLoad”中捕获响应,将我的 CSS 文件注入其中并且它起作用了 :)
也许有另一个更优雅的解决方案来解决这个问题,但这就是我想出的......
希望对您有所帮助。