WKwbview navigationresponse, как получить запрошенный URL - PullRequest
0 голосов
/ 05 января 2019

В моем wkwebview у меня есть ссылка на какой-то файл, такой как страницы, номера и т. Д. Я вижу, что wknavigationresponse принимает решение о загрузке или показе контента. Однако объект ответа wknavigation, похоже, не содержит запрошенный URL-адрес, а измененный URL-адрес яблока. например я прошу

https://www.sarvepalli.net/ax/Subscriptions%20Data.numbers

Он переводится в wknavigationresponse.response.url, как показано ниже:

х-яблочно-QL-ID: //4A35794C-554C-4732-9159-BFCB7A688F1D/x-apple-ql-magic/Subscriptions%20Data.numbers

Я устал от использования wknavigationaction для установки глобальной переменной с именем current_url, но это, похоже, не работает, поскольку эти методы либо асинхронно вызываются, либо вызываются в обратном порядке, чем я предполагал (1) Wknavigationaction затем (2) solvepolicyfor: WknavigationResponse

Я застрял в любой помощи в поиске способа сбора текущего URL-адреса, запрашиваемого, когда пользователь нажимает на ссылку в веб-просмотре, он будет очень признателен.

Спасибо Виджей

/* This should get replaced by the navgationaction */
var current_url=   URL(string: "https://example.com/download/a.docx")!  

func webView(_ webView: WKWebView,
                 createWebViewWith configuration: WKWebViewConfiguration,
                 for navigationAction: WKNavigationAction,
                 windowFeatures: WKWindowFeatures) -> WKWebView? {
        // if navigationAction.targetFrame == nil, let url = navigationAction.request.url {
        if navigationAction.request.url != nil, let url = navigationAction.request.url {
            //if url.description.lowercased().range(of: "http://") != nil ||
            self.current_url = url
           let url_request:URLRequest =  URLRequest(url: navigationAction.request.url!)
                    webView.load(url_request)
}

    func webView(_ webView: WKWebView,
                 decidePolicyFor navigationResponse: WKNavigationResponse,
                 decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) {
        let mimetype = navigationResponse.response.mimeType!
        let thisurl = navigationResponse.response.url?.absoluteString
        print("Current Url being requested is ",current_url.absoluteString)

        print("Current Url being considered ", navigationResponse.response.url?.absoluteString ?? "unknown");
         decisionHandler(.allow)
}

Я получаю странный ответ, такой как

Текущий запрашиваемый URL напечатан как "https://example.com/download/a.docx" (Это должен быть URL, по которому https://www.sarvepalli.net/ax/Subscriptions%20Data.numbers )

Текущий URL рассматривается х-яблочно-QL-ID: //4A35794C-554C-4732-9159-BFCB7A688F1D/x-apple-ql-magic/Subscriptions%20Data.numbers (Это непригодный внутренний URL-адрес, указанный Apple, который, возможно, кэшируется где-то на устройстве)

1 Ответ

0 голосов
/ 06 января 2019

Я решил эту проблему. Похоже, если я форсирую поиск навигационной политики, тогда этот wkwebview-делегат вызывается каждый раз, и все работает нормально, как я и ожидал.

func webView(_ webView: WKWebView,
             decidePolicyFor navigationAction: WKNavigationAction,
             decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {

    // if navigationAction.targetFrame == nil, let url = navigationAction.request.url {
    if navigationAction.request.url != nil, let url = navigationAction.request.url {
    self.curl = url
    decisionHandler(.allow)
    }
 }

Теперь self.curl глобальная переменная обновляется при каждом вызове URL.

Спасибо! Виджей

...