gpt4 book ai didi

html - 从 Documents 目录在 UIWebview 中打开时,ios-css 和 js 无法在 html 文件中链接

转载 作者:太空狗 更新时间:2023-10-29 15:35:34 24 4
gpt4 key购买 nike

我在 ios 的 Documents 目录 中的 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 的完整路径 时,它对我来说工作正常。

为什么相对路径不起作用?

提前致谢。

最佳答案

显然,在以编程方式加载 HTML 文件时,文档库与应用程序的文档目录不同。

查看 HTML 中的 BASE 元素,它位于 元素中:

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>

要解决此问题,您需要手动提供文档基 url。您还没有发布如何以编程方式加载 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

关于html - 从 Documents 目录在 UIWebview 中打开时,ios-css 和 js 无法在 html 文件中链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19947897/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com