2

我有这个代码:

NSURL *mainBundleURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
[webView loadHTMLString:htmlFile baseURL:mainBundleURL];

我知道 htmlFile 是正确的。它有里面:

<link rel="stylesheet" type="text/css" href="stylesheet.css">

我也知道 mainBundle 中的 stylesheet.css。我检查了 project.app 的内容。

问题是 webview 是空的。但是,如果我将基本 Url 用作 nil:

[webView loadHTMLString:htmlFile baseURL:nil];

webview 显示内容,但没有 css 文件。

我不知道为什么这不起作用。提前致谢。

4

3 回答 3

3

我使用 resourceURL 属性解决了这个问题

NSURL *baseURL = [[NSBundle mainBundle] resourceURL];

接着[webView loadHTMLString:htmlFile baseURL:baseURL];

-萨尔

于 2014-12-03T20:09:40.687 回答
1

大多数示例都引用baseUrl: nil,但为了访问 CSS 文件,您需要引用捆绑包以便<link rel="stylesheet" ...可以访问该文件。

这是我在 Swift 3 中的解决方案:

let baseUrl : URL = Bundle.main.resourceURL! as URL
let htmlFile = Bundle.main.path(forResource: "*html file name*", ofType: "html")
let htmlString = try? String(contentsOfFile: htmlFile!, encoding: String.Encoding.utf8)
webView.loadHTMLString(htmlString!, baseURL: baseUrl) 

相信 Sal 的回答指出了这一点。

于 2017-04-29T16:54:47.043 回答
0

PerhabsshouldStartLoadWithRequest方法会阻止您的请求。尝试这个:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    if ([request.URL.absoluteString hasPrefix:@"file"]) {return YES;}

    //deal with the request
}
于 2015-06-11T06:53:18.220 回答