我在ios
中的文件目录中有我的www文件夹的结构Documents
--www
--index.html
--js
--script.js
--css
--style.css
我的 index.html 文件引用脚本和样式文件,如下所示:
<link rel="stylesheet" href="css/style.css" />
<script type="text/javascript" src="js/script.js"></script>
请注意,从远程下载和解压缩的zip文件中,文件和目录结构是在应用启动后创建的。因此,不是由于Xcode文件夹组与应用程序包的Documents子文件夹混淆而导致的问题。
在浏览器中运行时运行正常但在以编程方式在UIWebview中加载index.html时,脚本和样式不起作用。同时索引文件本身加载完美。
当我在index.html文件中提供脚本和css 的完整路径时,它对我来说很好。
为什么相对路径不起作用?
提前致谢。
答案 0 :(得分:4)
显然,以编程方式加载HTML文件时,文档库与应用程序的Documents目录不同。
查看HTML中的BASE元素,它位于&lt; head&gt;内。元素:
http://www.w3.org/wiki/HTML/Elements/base
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>This is an example for the <base> element</title>
<base href="http://www.example.com/news/index.html">
</head>
<body>
<p>Visit the <a href="archives.html">archives</a>.</p>
</body>
</html>
要解决此问题,您需要手动提供文档基本网址。您尚未发布代码如何以编程方式加载index.html文件,因此我假设您使用的是以下UIWebView
方法:
- (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL
所以现在试试这段代码,看看它是否解决了你的问题:
// Get the app Documents path
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
// Add www/index.html to the basepath
NSString *fullFilepath = [basePath stringByAppendingPathComponent:@"www/index.html"];// This must be filled in with your code
// Load the file, assuming it exists
NSError *err;
NSString *html = [NSString stringWithContentsOfFile:fullFilepath encoding:NSUTF8StringEncoding error:&err];
// Load the html string into the web view with the base url
[self.webview loadHTMLString:html baseURL:[NSURL URLWithString:fullFilepath]];
如果这不起作用,请尝试更新从.zip文件获取的HTML文件的代码。类似的东西:
// Get the app Documents path
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
// Add www/index.html to the basepath
NSError *err;
NSString *fullFilepath = [basePath stringByAppendingPathComponent:@"www/index.html"];
// Load the file, assuming it exists
NSString *html = [NSString stringWithContentsOfFile:fullFilepath encoding:NSUTF8StringEncoding error:&err];
// Check to ensure base element doesn't already exist
if ([html rangeOfString:@"<base"].location == NSNotFound) {
// HTML doesn't contain a base url tag
// Replace head with head and base tag
NSString *headreplacement = [NSString stringWithFormat:@"<head><base href=\"%@\">", fullFilepath];
html = [html stringByReplacingOccurrencesOfString:@"<head>" withString:headreplacement];
[html writeToFile:fullFilepath atomically:YES encoding:NSUTF8StringEncoding error:&err];
}
// Now the file has a base url tag
答案 1 :(得分:3)
可能是你的JS和CSS文件不是由xcode编译的。 使用xcode打开您的项目并转到'Targets'并查看'Compile Sources'部分。如果您的js文件存在于该文件夹中,请将其移至“复制捆绑资源”,并从“编译源”文件夹中删除。
之后从您的设备中删除应用程序,然后转到xcode中的Build菜单并清除所有目标并重新编译。
检查您的HTML文件是否包含js文件。
加载js可能是你的麻烦。
答案 2 :(得分:3)
试试这个......
我希望这能解决你的问题
我也遇到了同样的问题,我在将文件添加到XCode时通过简单的操作解决了这个问题我做了一个小的更改,如下图所示:你必须通过为任何文件夹选择创建文件夹引用来添加文件选项
在下图中,一个用于添加HTML,如果要从项目外添加文件,也可以单击复制。如果文件已存在则无需再次复制。