Оценка JavaScript в WKWebView для получения URL-адреса видео не работает - PullRequest
0 голосов
/ 29 мая 2019

Итак, я пытаюсь получить URL источника видео, оценивая javascript в WKWebView. Пытался искать во многих разных постах, но ни один из них не дал мне то, что я хочу. Я пытаюсь загрузить видео с Dailymotion.com, которое я открыл в моем WKWebView. Теперь в методах делегатов моего WKWebView я передаю текущий URL-адрес Webview для оценки JavaScript, чтобы получить URL-адрес видео.




    func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!)
    {
        print("wkwebview")
    }

    func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error)
    {
        print("wkwebview")
    }

    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
        //print("wkwebview")
        //print(navigationAction.request.url?.absoluteString as Any)


        webView.evaluateJavaScript("document.getElementsByTagName('video')")
        {
            (result, error) in
            guard error == nil else
            {
                print(error!)
                return
            }
             print(String(describing: result))
        }



       //loadURL(site: (webView.url?.absoluteString)!)

        decisionHandler(.allow)
    }


Я получаю ошибку Error Domain=WKErrorDomain Code=5 "JavaScript execution returned a result of an unsupported type" UserInfo={NSLocalizedDescription=JavaScript execution returned a result of an unsupported type}

1 Ответ

0 голосов
/ 29 мая 2019

Swift не может интерпретировать объекты javascript - в этом случае вы возвращаете массив объектов-элементов с тегом «video».

Однако Swift может получать строковые значения в порядке. Предполагая, что ваш видеоэлемент имеет URL-адрес в качестве атрибута 'src', вы можете просто использовать document.getElementsByTagName('video')[0].getAttribute('src') вместо текущего вызова JS, чтобы получить исходный URL-адрес в виде строки.

.getElementsByTagName возвращает массив. Вам нужно будет выбрать правильный индекс, если у вас есть несколько элементов видео, или просто захватить первый (как я делал выше).

В качестве альтернативы: document.getElementsByTagName('video')[0].src

...