我构建了一个简单的ios应用程序,可以将从服务器下载的html加载到webview中。
[self.webView loadHTMLString:notif.html baseURL:nil];
这很完美。问题是我需要将一个本地css文件应用到webview,我不知道该怎么做。
我试过这样做,但样式没有应用。
NSString *HTML_HEADER=@"<HTML><HEAD><link rel='stylesheet' href='style.css' type='text/css'></HEAD><BODY>";
NSString *HTML_FOOTER=@"</BODY></HTML>";
NSString *htmlString = [NSString stringWithFormat:@"%@%@%@",HTML_HEADER,notif.html,HTML_FOOTER];
NSLog(@"htmlString %@", htmlString);
[self.webView loadHTMLString:htmlString baseURL:nil];
有什么想法吗?
由于
更新:
我尝试执行以下操作:
NSString *HTML_HEADER=@"<HTML><HEAD><link rel='stylesheet' href='#FILE1#' type='text/css'></HEAD><BODY>";
NSString *HTML_FOOTER=@"</BODY></HTML>";
NSString *cssFilePath = [[NSBundle mainBundle] pathForResource:@"style" ofType:@"css"];
NSString *html_header_with_files = [HTML_HEADER stringByReplacingOccurrencesOfString:@"#FILE1#" withString:cssFilePath];
NSString *htmlString = [NSString stringWithFormat:@"%@%@%@",html_header_with_files,notif.html,HTML_FOOTER];
NSLog(@"htmlString %@", htmlString);
[self.webView loadHTMLString:htmlString baseURL:nil];
在Build Phases中我添加了style.css
更新2:
我还检查style.css是否与
一起存在 NSString* filePath = [[NSBundle mainBundle] pathForResource:@"style" ofType:@"css"];
NSLog(@"\n\nthe string %@",filePath);
答案 0 :(得分:2)
原因是CSS和JS文件在运行时不可用于HTML格式的渲染。
您需要注意以下几点:
检查是否添加了所有文件,然后手动添加这些文件。
所有文件都应放在同一个文件夹中,以便参考文件路径在运行时可用。
我宁愿您使用标记,而不是直接使用文件名。使用符号作为标记来替换CSS和JS文件的实际路径。
例如:
NSString *HTML_HEADER=@"<HTML><HEAD><link rel='stylesheet' href='#FILE1#' type='text/css'></HEAD><BODY>";
NSString *HTML_FOOTER=@"</BODY></HTML>";
NSString *cssFilePath = [[NSBundle mainBundle] pathForResource:@"style" ofType:@"css"];
NSString *html_header_with_files = [HTML_HEADER stringByReplacingOccurrencesOfString:@"#FILE1#" withString:cssFilePath];
NSString *htmlString = [NSString stringWithFormat:@"%@%@%@",html_header_with_files,notif.html,HTML_FOOTER];
NSLog(@"htmlString %@", htmlString);
[self.webView loadHTMLString:htmlString baseURL:nil];
在上面的示例中,我从html部分替换了style.css
字符串,并添加了标记#FILE1#
。
此标记是文件style.css
的相对URL,它将在webView中加载html之前被替换。
因此,无论何时您想将html加载到webView,都要从其亲属网址加载所有资源文件。
此处HTML_HEADER
将替换为所有资源文件的实际路径。
答案 1 :(得分:1)
您可以导入文件(如CSS,JS ...),即使不将它们放入&#34;复制捆绑资源&#34;,这样您就可以下载CSS并在运行应用程序时使用它。
Trick正在设置&#34; baseURL&#34;参数,它成为UIWebView的根目录。
// HTML file
NSString *htmlFile = [[NSBundle mainBundle] pathForResource:htmlFileName ofType:@"html"];
NSString* htmlString = [NSString stringWithContentsOfFile:htmlFile encoding:NSUTF8StringEncoding error:nil];
// root directory
NSURL *rootDir = [[NSBundle mainBundle] bundleURL];
[self.webView loadHTMLString:htmlString baseURL:rootDir];
然后,当你说
<link rel="stylesheet" type="text/css" href="style.css">
在你的HTML文件中,app将在rootDir目录中查找style.css(在这种情况下,[[NSBundle mainBundle] bundleURL])
答案 2 :(得分:1)
我终于找到了解决方案。
NSString *HTML_HEADER=@"<HTML><HEAD><link rel='stylesheet' href='#FILE1#' type='text/css'></HEAD><BODY>";
NSString *HTML_FOOTER=@"</BODY></HTML>";
NSString *cssFilePath = [[NSBundle mainBundle] pathForResource:@"style" ofType:@"css"];
NSString *html_header_with_files = [HTML_HEADER stringByReplacingOccurrencesOfString:@"#FILE1#" withString:cssFilePath];
NSString *htmlString = [NSString stringWithFormat:@"%@%@%@",html_header_with_files,notif.html,HTML_FOOTER];
NSString *path = [[NSBundle mainBundle] bundlePath];
NSURL *baseURL = [NSURL fileURLWithPath:path];
NSLog(@"htmlString %@", htmlString);
[self.webView loadHTMLString:htmlString baseURL:baseURL];
必须在loadHTMLString中指定bundlePath:
解决方案是@Kampai和@itzprintz
给出的两个答案的组合