2016-11-07 11 views
3

Мне нужно загрузить локальный файл в WKWebView. Я использую новый метод ios9WKWebView loadFileURL работает только один раз

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

Он отлично работает для первой загрузки (навигационная делегация правильно называется), но если я пытаюсь загрузить новый и другой файл, он ничего не делает.

URL-адрес currentItem в экземпляре wkwebview изменен. Но если я принудительно перезагружаю метод делегата didFinishNavigation вызывается с предыдущим установленным URL. Я также пытался перемещаться вперед, но файл, который должен был быть загружен, является текущим, это не на 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]]; 

я упускаю что-то? Я не мог найти ничего подобного.

Любая помощь приветствуется, спасибо.

ответ

4

У меня была очень похожая проблема, как у вас, но в моем случае у меня была ссылка на объекты WKWebView в объектах UIViewCell (недавно я перешел из UIWebView).

Я повторно использовал объекты WKWebView из-за причин производительности (стандартная утилита для повторного использования).

Чтобы сделать длинную историю короткой, то есть параметр allowingReadAccessToURL в loadFileURL: allowingReadAccessToURL: метод, который говорит, что WKWebView разрешены пути, когда он загружает локальный файл. По какой-то причине он не заботится об этом параметре, когда загружается какая-либо страница с другим параметром allowReadAccessToURL. Поэтому я рекомендую использовать все пространство пути документов в качестве параметра по умолчанию для этого метода:

NSURL *documentsURL = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] objectAtIndex:0]; 
[self loadFileURL:request.URL allowingReadAccessToURL:documentsURL]; 

Надеюсь, это поможет.

+0

Это не помогло мне. –

+1

Очень важно передать весь каталог, содержащий ваши файлы-кандидаты, для загрузки в «allowReadAccessToURL:», иначе, когда вы попытаетесь загрузить другой файл в своем веб-браузере, он не будет работать. – Loebre