Estoy usando el siguiente código para extraer la URL de UIWebView : funciona bien, pero este mismo código que se usa para WKWebView ya no funciona. ¿Alguien puede ayudarme? El video que se reproduce en WKWebView es Inlineplaceback y no está en pantalla completa.
mi código es:
NotificationCenter.default.addObserver(self, selector: #selector(self.playerItemBecameCurrent(_:)), name: NSNotification.Name("AVPlayerItemBecameCurrentNotification"), object: nil) @objc func playerItemBecameCurrent(_ sender : NSNotification){ let playerItem: AVPlayerItem? = sender.object as? AVPlayerItem if playerItem == nil { print("player item nil") return } // Break down the AVPlayerItem to get to the path let asset = playerItem?.asset as? AVURLAsset let url: URL? = asset?.url let path = url?.absoluteString print(path!,"video url") }URL de respuesta:
Es la URL del video, no la URL de la página web, así que ayúdenme a obtener esto. Gracias.
Esto es una especie de truco, pero la única forma que encontré para lograrlo.
Primero configúrate como delegado de navegación de WKWebView:
self.webView?.navigationDelegate = selfAhora escuche todos los cambios de navegación y guarde la URL solicitada:
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { if let urlStr = navigationAction.request.url?.absoluteString { //Save presented URL //Full path can be accessed via self.webview.url } decisionHandler(.allow) }Ahora solo necesita saber cuándo se vuelve visible la nueva pantalla y usar la URL que guardó (para conocer la URL del video de la nueva pantalla visible).
Puede hacerlo escuchando la notificación UIWindowDidBecomeVisibleNotification :
NotificationCenter.default.addObserver(self, selector: #selector(windowDidBecomeVisibleNotification(notif:)), name: NSNotification.Name("UIWindowDidBecomeVisibleNotification"), object: nil)Luego verifique si la ventana de navegación no es su ventana, y eso significa que se abrió una nueva pantalla:
@objc func windowDidBecomeVisibleNotification(notif: Notification) { if let isWindow = notif.object as? UIWindow { if (isWindow !== self.view.window) { print("New window did open, check what is the currect URL") } } }recupera la URL completa de la propiedad de solicitud de la acción de navegación en el método webView(_:decidePolicyFor:decisionHandler:) de WKNavigationDelegate.
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { if let urlStr = navigationAction.request.url?.absoluteString { //urlStr is your URL } decisionHandler(.allow) }tampoco olvides cumplir con el protocolo
webView.navigationDelegate = selfPuede intentar inyectar JS en su WKWebView como se muestra aquí: https://paulofierro.com/blog/2015/10/12/listening-for-video-playback-within-a-wkwebview