将JavaScript评估到WKWebView中以获取视频URL不起作用

时间:2019-05-29 10:22:31

标签: javascript ios swift url wkwebview

因此,我试图通过将JavaScript评估为WKWebView来获取视频源URL。试图搜索许多不同的帖子,但没有一个让我明白我想要的。我正在尝试从Dailymotion.com下载视频,该视频已在WKWebView中打开。现在,在WKWebView的委托方法中,我传递Webview的当前URL来评估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 :(得分:0)

Swift无法解释javascript对象-在这种情况下,您将返回带有标签“ video”的元素对象数组。

但是,Swift可以很好地接收String值。假设您的视频元素具有url作为“ src”属性,则只需使用document.getElementsByTagName('video')[0].getAttribute('src')代替当前的JS调用即可获取源url作为字符串。

.getElementsByTagName返回一个数组。如果您有多个视频元素,则需要获取正确的索引,或者仅获取第一个(就像我在上面所做的那样)。

或者: document.getElementsByTagName('video')[0].src