使用绝对路径引用CSS的UIWebView

4

我有许多网页被用于UIWebView中,目前这些网页引用了相对路径和绝对路径的资源,如下所示:

<link rel="stylesheet" type="text/css" href="/css/path/mycss.css"/>
<img src="myimage.png" />

HTML文件本身位于路径"/page/path/page.html",与其中的myimage.png图片在同一目录中。这些页面也用于直接在浏览器中呈现,理想情况下我不想改变路径。在iPad上,网站内容会被动态加载到文档目录中以供离线查看。问题是似乎没有办法让UIWebView处理绝对路径的分辨率。我正在使用以下内容加载内容:
NSData *data = [NSData dataWithContentsOfFile:fullPath];    
[self loadData:data MIMEType:@"text/html" textEncodingName:@"utf-8" baseURL:baseURL];

如果我把baseURL指向“/page/path”目录,UIWebView将正确找到myimage.png,但无法找到mycss.css。 我还尝试将baseURL指向Documents目录,但这无法解析任何资源。 实际上,我一直无法让UIWebView解析任何绝对路径。有人能够使UIWebView与绝对路径一起工作吗?
2个回答

0
你尝试使用类似下面这样的路径来引用你的CSS文件了吗?
<link rel="stylesheet" type="text/css" href="../../css/path/mycss.css"/>
<img src="myimage.png" />

那个方法可以行得通,但是像我说的,我试图避免改变页面/路径。这里涉及到内容管理系统、官僚主义等问题。UIWebView无法处理这种情况有点让我惊讶。我感觉自己一定漏掉了什么。 - ax123man
如果baseURL为nil,UIWebView如何知道在Documents目录中查找资源? - ax123man

0
为什么您想在HTML文件中使用一些绝对路径引用?
我认为这不是一个好主意,因为您无法预测未来用户的应用安装路径。
例如,我的嵌入式网页位于

file://localhost/var/mobile/Applications/0E8A7BA5-8DB7-4F88-AC69-0E48F9182DD2/MyApp.app/homepage/index.html

每次删除应用程序时,0E8A7BA5-8DB7-4F88-AC69-0E48F9182DD2部分都会更改!

我认为好的方法是

  • 通过选择“为任何添加的文件夹创建文件夹引用”,在xCode中添加您的网站
  • 只有一些相对路径
  • 使用:

    NSString * urlString = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html" inDirectory:@"homepage"];
    NSURL * url = [NSURL fileURLWithPath:urlString isDirectory:NO];
    NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:(NSTimeInterval)10.0 ];
    

1
你的HTML嵌入在应用程序包中,我假设它在你的控制之下。我的HTML通过自定义同步过程通过HTTP动态传递并存储在文档目录中。这些页面由另一个组使用CMS构建,并且这些相同的页面用于提供非移动Web站点。在这种情况下拥有绝对路径并不罕见。我必须权衡要求该组将所有引用都变成相对路径的政治因素。 - ax123man
好的,我明白了。不幸的是,由于应用程序文件夹中的未知部分,您无法使用绝对路径。我认为对您最好的解决方案是预处理您的文件(例如使用Perl或直接在移动应用程序中),并将每个绝对URL转换为相对URL(其基本文件夹是您的网站根目录)。 - Martin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接