首页 > 解决方案 > WKWebView loadFileURL 抛出 WebPageProxy::Ignoring 加载此主资源的请求,因为它在沙箱之外

问题描述

我正在尝试在 WKWebView 中打开本地 html 文件,但我不断收到错误消息:

从 Web 进程收到意外的 URL:'file:///Users/username/Library/Containers/dev.WebView/Data/file:/Users/username/Documents/WebView/WebView/WebView/WebContent/index.html'

2020-01-30 09:36:38.817862+0100 WebView[1679:20612] [Process] 0x101043e20 - WebPageProxy::Ignoring request to load this main resource because it is outside the sandbox

这是我尝试过的代码:

    NSString *path = @"file:///Users/username/Documents/WebView/WebView/WebView/WebContent/index.html";
    NSURL *url = [NSURL fileURLWithPath:path];
            
    [_webView loadFileURL:url allowingReadAccessToURL:url];

我还尝试通过以下方式允许访问 Documents 目录:

    NSString *path = @"file:///Users/username/Documents/WebView/WebView/WebView/WebContent/index.html";
    NSURL *url = [NSURL fileURLWithPath:path];
            
    NSURL *documentsURL = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] objectAtIndex:0];
    [_webView loadFileURL:url allowingReadAccessToURL:documentsURL];

我还在项目的签名和功能设置中启用了传出连接(客户端),也无济于事。

标签: objective-cmacoscocoamacos-catalina

解决方案


解决方案是将 html 文件添加到项目并将其与 build 捆绑在一起,以便它显示在 Resources 目录中。在项目的 Build Phases 设置中,文件需要显示在 Copy Bundle Resources 下。

这是可用于加载文件的一段代码:

    NSBundle *mainBundle = [NSBundle mainBundle];
    NSString *filePath = [mainBundle pathForResource:@"index" ofType:@"html"];

    NSURL *url = [NSURL fileURLWithPath:filePath];

    [_webView loadFileURL:url allowingReadAccessToURL:[url URLByDeletingLastPathComponent]];

您还可以在我的 github 存储库中找到完整的解决方案: Cocoa Web View Load Local File


推荐阅读