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

Posted

技术标签:

【中文标题】将 JavaScript 评估为 WKWebView 以获取视频 URL 不起作用【英文标题】:Evaluating JavaScript into WKWebView to fetch the Video URL doesn't work 【发布时间】:2019-05-29 10:22:31 【问题描述】:

所以我试图通过将javascript评估为WKWebView来获取视频源URL。试图搜索许多不同的帖子,但没有一个能得到我想要的。我正在尝试从我在WKWebView 中打开的 Dailymotion.com 下载视频。现在在我的 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】:

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

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

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

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

【讨论】:

以上是关于将 JavaScript 评估为 WKWebView 以获取视频 URL 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

WKWebView javascript 警报、提示、确认不起作用

为啥 == false 评估为 false 而 [] == false 评估为 true?

Android - 使用 WebView 评估 javascript 字符串并返回值

如何在javascript中评估语句if [重复]

WKWebView 在不重新加载页面的情况下评估 Javascript

如何创建两个 WkWebView