我正在尝试将本地 css 文件“注入(inject)”到下载的 xhtml 文件中。
我找到了很多关于如何做的例子,但它对我不起作用......
这是我的代码:
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *cssPath = [path stringByAppendingPathComponent:@"test.css"];
NSString *js = [NSString stringWithFormat:@"var cssNode = document.createElement('link');"
"cssNode.type = 'text/css';"
"cssNode.rel = 'stylesheet';"
"cssNode.href = '%@';", cssPath];
js = [NSString stringWithFormat:@"%@document.getElementsByTagName('head')[0].appendChild(cssNode);", js];
//m_webview is a member
[m_webView stringByEvaluatingJavaScriptFromString:js];
}
我在这里做错了什么?
谢谢,
最佳答案
我也遇到了麻烦。
我试图从服务器加载 HTML 文件并使用本地 CSS 文件更改样式。
一开始我用
[webView loadRequest:reqObj];
当它点击 - (void)webViewDidFinishLoad:(UIWebView *)webView
我试图将 CSS 文件作为子项推送到“head”:
- (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
中,我按照上面的代码注入(inject)了 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 文件注入(inject)其中并且它起作用了:)
也许有另一个更优雅的解决方案来解决这个问题,但这就是我想出的……
希望对您有所帮助。
关于iphone - 将本地 css 注入(inject) UIWebView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8563038/