【问题标题】:Cocoa WebView - Loading a local HTML pageCocoa WebView - 加载本地 HTML 页面
【发布时间】:2010-10-07 20:31:41
【问题描述】:

浏览了很多之后,我仍然无法弄清楚这一点。我在 Xcode 的项目资源组中添加了一个 HTML 页面及其图像目录(复制过来)。

当我尝试使用以下代码加载 WebView 时,文本显示正常,但未加载图像。

NSString *path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"index.html"];
NSString *htmlContent = [NSString stringWithContentsOfFile:path];
NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
[[tempWebView mainFrame] loadHTMLString:htmlContent baseURL:url];

编辑:抱歉耽搁了,这是一些失败的基本 html。

<html>
    <body> 
        <img src="images/bg.png"></img> 
    </body>
</html>

我编辑的代码看起来像这样 -

NSString *path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];
NSURL *url = [NSURL fileURLWithPath:path];
[[webView1 mainFrame] loadRequest:[NSURLRequest requestWithURL:url]];

EDIT2:刚刚意识到这是路径的问题。显然&lt;img src = "images/bg.png"&gt; 不起作用,但如果我将 bg.png 复制到根目录并说&lt;img src = "bg.png"&gt; 一切正常。我仍然不确定我哪里出了问题。

【问题讨论】:

  • 向我们展示一些引用图像的示例 HTML。

标签: cocoa webview


【解决方案1】:

考虑执行以下操作:

  1. ask the bundle to give you the correct path 不是自己获取资源路径并在其上装订子路径。
  2. ask the bundle to give you the correct URL 根本不用处理路径。 (需要 Mac OS X 10.6 或更高版本。)
  3. ask the WebView to load the URL 不是直接将 HTML 内容注入框架中。

这会将您的代码减少到两行,如果 HTML 代码正确,则可以使用。

【讨论】:

  • 其实我最初的实现是这样的。但是,我看到了一个 SO 问题,其中有人遇到了同样的问题,但通过这种方式实现它来解决它。我想知道它是否与 baseURL 有关。
  • Tejaswi Yerukalapudi:有这些问题的链接吗?
  • 嗯,我现在似乎找不到它,但我已经编辑了我的实现以遵循这个。看来我的问题是使用导航到子文件夹的语法来抓取 HTML 中的图像。我有点明白为什么会发生这种情况,但我不确定我能做些什么来解决它,再次感谢您的所有帮助!
  • Tejaswi Yerukalapudi:那么,如果您查看构建文件夹中的应用程序包,您能找到复制到那里的图像目录吗? (此外,HTML 中的等号周围不应有空格。)
  • 糟糕,我只是直接输入 SO,原来的 HTML 没有它们。而且,是的,图像被复制了。
【解决方案2】:

我认为这里的问题与在构建阶段如何将文件复制到资源目录有关。在 Xcode 中显示为组的任何文件夹在复制时都将被展平。如果您要将整个网站文件夹结构添加到项目中,则必须在添加结构时选择“为任何添加的文件夹创建文件夹引用”。

一个例子: 我有一个 html 文件,它引用了同名文件夹中的图像。我将所有这些添加到我的项目中,选择“文件夹引用”:

我的项目中的文件将如下所示(注意蓝色文件夹):

当项目建成后,网页内容文件夹将被维护:

无需开始设置基本 URL 或使用字符串加载。 现在可以像这样成功加载网页:

NSURL *url = [[NSBundle mainBundle] URLForResource:@"LocalTestWeb" withExtension:@"html"];
[[self.webView mainFrame] loadRequest:[NSURLRequest requestWithURL:url]];

【讨论】:

    【解决方案3】:

    这段代码对我有用(只有 Canvas 有问题):

    NSString* filePath = [[NSBundle mainBundle] pathForResource:@"index" 
                                                         ofType:@"html"
                                                    inDirectory:@"html_files_folder"];
    NSURL* fileURL = [NSURL fileURLWithPath:filePath];
    NSURLRequest* request = [NSURLRequest requestWithURL:fileURL];
    [[webView mainFrame] loadRequest:request];
    

    【讨论】:

      【解决方案4】:

      您将需要获取base64 字符串中的图像文件数据。并将该字符串放入 img 标签中,如下所示。

      <img src="data:image/png;base64,iVBORw0KGgoAAAANS..." />
      

      详情请见:http://danielmclaren.com/node/90

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多