WKWebView loadFileURL只能运行一次

时间:2016-11-07 19:12:33

标签: ios objective-c ios9 wkwebview

我需要在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]];

我错过了什么吗?我无法找到与此相关的任何内容。

感谢任何帮助,谢谢。

3 个答案:

答案 0 :(得分:8)

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

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

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

<?xml version="1.0" encoding="UTF-8"?>
<catalog>
  <cd gender="male">
    <title>Empire Burlesque</title>
    <artist>Bob Dylan</artist>
    <country>USA</country>
    <company>Columbia</company>
    <price>10.90</price>
    <year>1985</year>
  </cd>
  <cd gender="male">
    <title>Hide your heart</title>
    <artist>Bonnie Tyler</artist>
    <country>UK</country>
    <company>CBS Records</company>
    <price>9.90</price>
    <year>1988</year>
  </cd>
</catalog>

希望它有所帮助。

答案 1 :(得分:2)

最后!我知道哪里出错!! 如果要加载新的不同文件,请确保它与第一个加载文件位于同一目录中。

例如

NSString *pathA = "file:///path/to/abc/dirA/A.html";
NSString *pathB = "file:///path/to/abc/dirB/B.html";
NSString *pathC = "file:///path/to/abc/dirC/C.html";


NSURL *url = [NSURL fileURLWithPath:pathA];

NSURL *readAccessToURL = [[url URLByDeletingLastPathComponent] URLByDeletingLastPathComponent];
 // readAccessToURL == "file:///path/to/abc/"

[self.wk_webview loadFileURL:url allowingReadAccessToURL:readAccessToURL];
// then you want load  pathB
url = [NSURL fileURLWithPath:pathB];
// this will work fine
[self.wk_webview loadFileURL:url allowingReadAccessToURL:readAccessToURL];

答案 2 :(得分:0)

我也遇到了这个问题。对我有用的是简单地刷新保存webView的UIView容器:

[webView loadFileURL:url allowingReadAccessToURL:[url URLByDeletingLastPathComponent]];
[webViewContainer setNeedsDisplay];
[webViewContainer setNeedsLayout];

希望这会有所帮助。