我正在使用下面的代码从UIWebView提取URL :它工作正常,但是,用于WKWebView的相同代码不再起作用。谁能帮我?在WKWebView中播放的视频不是全屏播放,而是Inlineplacyback。
我的代码是:
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")
}
Run Code Online (Sandbox Code Playgroud)
回应网址:
我是一个快速学习者。我使用 SwiftUI,它是一个结构体,我必须实现一个 WKWebView,并且其中的 url 正在动态更改。我必须捕捉这些不断变化的网址,但我尝试过的解决方案不起作用。
例如:https : //stackoverflow.com/a/48273950/10088243 我试过这个代码块,但它不起作用,它给了我一些编译器错误:
import SwiftUI
import WebKit
struct ContentView: UIViewRepresentable, WKNavigationDelegate {
let request = URLRequest(url: URL(string: "https://apple.com")!)
func makeUIView(context: Context) -> WKWebView {
let preferences = WKPreferences()
preferences.javaScriptEnabled = true
preferences.javaScriptCanOpenWindowsAutomatically = true
let configuration = WKWebViewConfiguration()
configuration.preferences = preferences
let webView = WKWebView(frame: .zero, configuration: configuration)
webView.allowsBackForwardNavigationGestures = true
return webView
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
// 'override' can only …Run Code Online (Sandbox Code Playgroud) 我正在使用 WKWebView 并且我允许后退和前进导航手势:
myWkWebView.allowsBackForwardNavigationGestures = true
Run Code Online (Sandbox Code Playgroud)
现在,用户有两种返回方式:按下按钮或向左滑动。行为会有所不同,所以我想知道如何知道用户何时向左/向右滑动,以便我可以处理这个问题。
我查看了 WKNavigationDelegate 参考(https://developer.apple.com/library/ios/documentation/WebKit/Reference/WKNavigationDelegate_Ref/),但找不到任何有用的东西。
任何的想法 ?
编辑
我忘了说我还尝试通过这种方式添加滑动手势识别器:
let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(MyVC.respondToSwipeLeftOrRight(_:)))
swipeRight.direction = UISwipeGestureRecognizerDirection.Right
let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(MyVC.respondToSwipeLeftOrRight(_:)))
swipeLeft.direction = UISwipeGestureRecognizerDirection.Left
self.view.addGestureRecognizer(swipeRight)
self.view.addGestureRecognizer(swipeLeft)
myWkWebView.scrollView.panGestureRecognizer.requireGestureRecognizerToFail(swipeRight)
myWkWebView.scrollView.panGestureRecognizer.requireGestureRecognizerToFail(swipeLeft)
Run Code Online (Sandbox Code Playgroud)
但是每次我向左或向右滑动时都不会触发它们。
是否有WKWebView类的函数允许您检测WebView的URL何时更改?
该didCommit和didStartProvisionalNavigation功能并不总是似乎与web视图中的某些元素工作时开火.
编辑:尝试添加通知观察者.这是我到目前为止所拥有的:
extension Notification.Name {
static let checkURL = Notification.Name("checkURL")
}
NotificationCenter.default.post(name: .checkURL, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(getter: webView.url), name: .checkURL, object: webView.url)
Run Code Online (Sandbox Code Playgroud) 我有一个呈现Laravel Web 应用程序的WKWebView。我目前有我的 ViewController 设置来捕获 URL 更改 - 它可以捕获大部分更改。但是,WKWebView 似乎忽略了通过 JavaScript 事件进行的少量 URL 更改。
我已经尝试了以下所有解决方案并在下面的代码中实现了它们:
在我展示代码之前有一个有趣的说明:它能够检测简单的 #hash 更改,但无法检测从第 1 页加载到第 2 页的 JavaScript 事件操作(这是我试图捕获的 URL 更改):
https://myweb.com/dashboard ? https://myweb.com/dashboard/projects/new
视图控制器.swift
import UIKit
import WebKit
class ViewController: UIViewController, WKUIDelegate, WKNavigationDelegate {
@IBOutlet var webView: WKWebView!
override func …Run Code Online (Sandbox Code Playgroud)