You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复iOS中UIWebView的nsurlconnection错误码1100

iOS端UIWebView/WKWebView加载本地缓存HTML遇1100错误的排查方案

我来帮你分析下这个问题——毕竟跨端加载本地资源时,iOS的WebView确实经常会有一些容易踩的坑。先理清楚你的场景:项目通过加载HTML字符串调用JS,进而加载服务器下载到本地的缓存内容,Android端正常运行,但iOS不管用UIWebView还是换成WKWebView都加载失败,调试发现触发了两次1100错误,而且报错指向的文件明明实际存在。

先贴出你提供的核心代码:

self.webContentView.delegate = self;
NSString* html = [player getHTMLString];
NSString* baseURL = [player getBaseURLPath];
[self.pageLoadingActivity startAnimating];
[self.webContentView loadHTMLString:html baseURL: [NSURL URLWithString: baseURL]];

下面是我整理的几个排查方向和解决方案,你可以逐一尝试:

1. 先解决baseURL的解析问题(大概率是根源)

你现在用[NSURL URLWithString: baseURL]来创建本地路径的URL,这是个常见错误!URLWithString:是专门用来处理HTTP/HTTPS这类网络URL的,本地文件路径应该用fileURLWithPath:,否则很可能解析出无效的URL,导致WebView找不到目标文件。

修改代码试试:

// 确保baseURL是缓存文件所在的目录路径,isDirectory设为YES
NSURL *baseURL = [NSURL fileURLWithPath:[player getBaseURLPath] isDirectory:YES];
[self.webContentView loadHTMLString:html baseURL:baseURL];

另外,顺便检查下应用对缓存目录的读写权限——虽然iOS默认允许访问自己的Documents目录,但如果文件是下载后移动过来的,权限可能出现异常。可以加段代码打印权限信息:

NSString *cacheDir = [player getBaseURLPath];
NSError *error;
NSDictionary *dirAttrs = [[NSFileManager defaultManager] attributesOfItemAtPath:cacheDir error:&error];
if (dirAttrs) {
    NSLog(@"缓存目录权限:%@", dirAttrs[NSFilePosixPermissions]);
} else {
    NSLog(@"获取目录权限失败:%@", error);
}

正常权限应该是0755或0700,如果权限不对,用setAttributes:ofItemAtPath:error:调整即可。

2. 深挖1100错误的触发原因

WebKit的1100错误对应NSURLErrorFileDoesNotExist,但你说文件存在,那大概率是这两个问题:

  • 路径包含特殊字符:检查那个.cache.html文件的路径里有没有空格、中文或者非ASCII字符,有的话要对路径做URL编码后再传给WebView。
  • 请求URL与实际路径不一致:在shouldStartLoadWithRequest方法里,把request.URL完整打印出来,看看有没有被转义、截断,或者和你预期的路径不一致的地方。

3. WKWebView的专属排查点

如果你用WKWebView,还要额外注意:

  • WKWebView对本地资源的跨域限制更严格,确保HTML里的JS/CSS资源都是相对路径,且baseURL正确指向资源所在目录。
  • 尝试跳过loadHTMLString:,直接用loadFileURL:加载那个缓存的HTML文件,看看能不能正常显示:
// 替换成你实际的缓存文件路径
NSString *cacheFilePath = @"/Users/ealpha4tech/Library/Developer/CoreSimulator/Devices/2CA71983-9996-44D6-944F-34E3EAFAE96D/data/Containers/Data/Application/6A19ABBA-CB68-4EE4-AC02-6AD3CB8A5A68/Documents/icplayer/icplayer/D2D6AFFF93CB2CFCB1640484F5429D89.cache.html";
NSURL *fileURL = [NSURL fileURLWithPath:cacheFilePath];
// 允许访问该文件所在的整个目录
NSURL *accessDirURL = [fileURL URLByDeletingLastPathComponent];
[self.webContentView loadFileURL:fileURL allowingReadAccessToURL:accessDirURL];

如果这个方法能正常加载,说明问题肯定出在loadHTMLString:的baseURL设置上。

4. 检查HTML字符串里的资源引用

最后,把[player getHTMLString]返回的HTML内容打印出来,看看里面的<script>、<link>、<img>等标签的路径是否正确。如果这些资源的相对路径和baseURL不匹配,WebView会去错误的路径找资源,也可能触发1100错误。

内容的提问来源于stack exchange,提问作者RR_Pradhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:13:48