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



所以我试图通过评估javascript来获取视频源URL,WKWebView。试图搜索许多不同的帖子,但没有一个得到我想要的。我正在尝试从 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}

Swift 无法解释 JavaScript 对象 - 在这种情况下,你返回了一个带有标签 'video' 的元素对象数组。

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

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

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

最新更新