将本地css文件加载到webview中

时间:2015-02-27 09:48:43

标签: html ios css webview

我构建了一个简单的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

enter image description here

更新2:

我还检查style.css是否与

一起存在
 NSString* filePath = [[NSBundle mainBundle] pathForResource:@"style" ofType:@"css"];
    NSLog(@"\n\nthe string %@",filePath);

3 个答案:

答案 0 :(得分:2)

原因是CSS和JS文件在运行时不可用于HTML格式的渲染。

您需要注意以下几点:

  1. 必须将所有CSS / JS / HTML文件添加到项目属性&gt;&gt; 构建阶段&gt;&gt; 复制捆绑资源。
  2. 检查是否添加了所有文件,然后手动添加这些文件。

    enter image description here

    1. 所有文件都应放在同一个文件夹中,以便参考文件路径在运行时可用。

    2. 我宁愿您使用标记,而不是直接使用文件名。使用符号作为标记来替换CSS和JS文件的实际路径。

    3. 例如:

      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

给出的两个答案的组合