WKWebView loadFileURL只能工作一次

Dou*_*idt 10 objective-c ios wkwebview ios9

我需要在WKWebView中加载本地文件.我正在使用新的ios9方法

- (nullable WKNavigation *)loadFileURL:(NSURL *)URL allowingReadAccessToURL:(NSURL *)readAccessURL

它适用于第一次加载(正确调用导航委托),但如果我尝试加载一个新的不同文件,它什么都不做.

wkwebview实例中currentItem的URL已修改.但是,如果我强制重新加载委托方法,则使用先前设置的URL调用didFinishNavigation.我也尝试向前导航但是应该加载的文件是当前的文件,它不在backForwardList上.

我用来启动WKWebView并加载文件的代码:

self.wk_webview = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
self.wk_webview.scrollView.delegate = self;
self.wk_webview.navigationDelegate = self;
[self.view addSubview:self.wk_webview];

NSURL *url = [NSURL fileURLWithPath:local_path];
[self.wk_webview loadFileURL:url allowingReadAccessToURL:[url URLByDeletingLastPathComponent]];
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?我找不到与此相关的任何内容.

任何帮助表示赞赏,谢谢.

Mic*_*hon 10

我遇到了一个非常类似的问题,但在我的情况下,我在UIViewCell对象中引用了WKWebView对象(我最近从UIWebView迁移过).

由于性能原因(标准出列可重用的东西),我正在重用WKWebView对象.

简而言之,loadFileURL中有 allowReadAccessToURL 参数: allowsReadAccessToURL :方法告诉WKWebView加载本地文件时允许的路径是什么.出于某种原因,当加载具有不同allowReadAccessToURL参数的某个页面时,它不关心此参数.所以我建议使用整个Documents路径空间作为此方法的默认参数:

NSURL *documentsURL = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] objectAtIndex:0];
[self loadFileURL:request.URL allowingReadAccessToURL:documentsURL];
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.

  • 将包含要加载的候选文件的整个目录传递到 "allowingReadAccessToURL:" 中非常重要,否则当您尝试在 webView 中加载另一个文件时,它将无法工作。 (2认同)