将 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 字符串并返回值