IOS - WKWebview получает нулевой URL-адрес в definePolicy при повторном нажатии на ту же кнопку - PullRequest
0 голосов
/ 29 января 2020

У меня есть 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.

1 Ответ

0 голосов
/ 29 января 2020

Хорошо, моя теория состоит в том, что, сообщая обработчику, что политика WKNavigationAction равна .cancel, следующие запросы не будут обрабатываться.

Что я сделал, так это обработал загрузку URL-адреса в createWebViewWith метод, и пусть политика будет всегда .allow.

...