У меня есть WKWebview
с кнопкой, которая загружает PDF, ссылка на кнопку выглядит следующим образом:
<a href="https://mysite.appiancloud.com/suite/rest/a/content/latest/igB-Xg0UyTkBidWeSJGldcpdb0wlYmynKQi_fRvbd5xpczwkJJXkcYS/o"><img class= src="$imageurl"></a>
Мне удалось загрузить PDF через определенные логи c, которые имеют отправная точка в decidePolicyFor
метод:
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
let url = navigationAction.request.url
if openInDocumentPreview(url!) {
decisionHandler(.cancel)
executeDocumentDownloadScript(webView, forAbsoluteUrl: url!.absoluteString)
} else {
decisionHandler(.allow)
}
}
Это хорошо работает, и URL-адрес тот, который с PDF. Однако, если я нажимаю кнопку еще раз, я получаю только null
URL, поэтому я не могу открыть документ снова. Это действие, которое я получаю:
<WKNavigationAction: 0x102d95fa0; navigationType = -1; syntheticClickType = 0; position x = 0.00 y = 0.00 request = <NSMutableURLRequest: 0x282e151d0> { URL: about:blank }; sourceFrame = <WKFrameInfo: 0x102d502f0; webView = 0x103048200; isMainFrame = YES; request = <NSMutableURLRequest: 0x282e116d0> { URL: https://mysite.appiancloud.com/suite/sites/home }>; targetFrame = <WKFrameInfo: 0x102d577a0; webView = 0x103048200; isMainFrame = NO; request = (null)>>
Если я проверю это на Safari Desktop, файл будет загружаться нормально каждый раз, однако я не могу найти причину, по которой WKWebView перестает получать URL-адрес. Никакой другой метод делегата не вызывается, даже createWebViewWith
, который имеет тенденцию вызываться при вызове target = "_ blank" url.
Интересно, действует ли WKWebview cachePolicy, но я не нахожу способ избежать этого кэширования URL-адреса или, если он кэшируется, для получения события, когда он пытается загрузить его снова.
Кроме того, как примечание, если я долго щелкаю ссылку, предварительный просмотр элемент правильно держит URL.