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

使用WKWebView加载本地PDF出现白屏问题求助

本地PDF文件在WKWebView中显示白屏,原代码曾正常运行

我在本地应用目录中存储了一份PDF文件,多年前编写的用于在WKWebView中显示该PDF的代码曾运行无异常,但现在无法正常工作,仅显示白屏。

原代码如下:

NSString* pdfFileName = [self getPDFFileName];

WKWebView* webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];

NSURL *url = [NSURL URLWithString:pdfFileName];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[webView loadRequest:request];
[self.view addSubview:webView];

我随后尝试了WKWebView的其他加载方式,例如:

NSData *data = [NSData dataWithContentsOfFile:pdfFileName];
[webView loadData:data MIMEType:@"application/pdf" characterEncodingName:@"" baseURL:[NSURL URLWithString:pdfFileName]];

或者:

[webView loadFileURL:url allowingReadAccessToURL:url];

但这些方式均无效。请问是什么变化导致本地PDF无法正常显示?


问题根源及解决方案

1. 本地文件URL构造错误(核心问题)

你使用[NSURL URLWithString:pdfFileName]构造本地文件URL是错误的。URLWithString:仅适用于网络URL(如http://开头的地址),本地文件路径必须用[NSURL fileURLWithPath:pdfFileName]来生成合法的file://协议URL。早期系统可能对错误URL有兼容处理,但现在WKWebView对URL格式的校验更严格,错误URL会直接导致加载失败,出现白屏。

2. loadFileURL:allowingReadAccessToURL:参数错误

调用该方法时,allowingReadAccessToURL:应该传入PDF文件所在的目录URL,而非文件本身的URL。WKWebView需要明确访问权限的范围,若传入文件URL,权限被限制为仅该文件,后续可能因权限校验逻辑的更新导致加载失败。

修正后的可运行代码

NSString* pdfFilePath = [self getPDFFileName];
// 生成正确的本地文件URL
NSURL *pdfFileURL = [NSURL fileURLWithPath:pdfFilePath];
// 获取文件所在目录的URL,用于设置访问权限范围
NSURL *fileDirectoryURL = [pdfFileURL URLByDeletingLastPathComponent];

WKWebView* webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
// 使用正确的API加载本地PDF
[webView loadFileURL:pdfFileURL allowingReadAccessToURL:fileDirectoryURL];
[self.view addSubview:webView];

额外排查要点

  • 确认getPDFFileName返回的是完整的本地文件绝对路径,而非相对路径或单纯文件名。可通过打印路径并检查文件是否存在:
    NSLog(@"PDF路径:%@,文件存在:%d", pdfFilePath, [[NSFileManager defaultManager] fileExistsAtPath:pdfFilePath]);
    
  • 检查App的文件访问权限:若PDF存储在沙盒外,需确保App已获取对应权限;沙盒内文件默认有权限访问。
  • 验证PDF文件本身是否损坏:将文件导出到电脑,用PDF阅读器打开确认文件完整性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 12:35:27