访问 WKWebView 的 AVPictureInPictureController 的委托回调
Posted
技术标签:
【中文标题】访问 WKWebView 的 AVPictureInPictureController 的委托回调【英文标题】:Accessing delegate callback of AVPictureInPictureController for a WKWebView 【发布时间】:2018-03-20 20:08:21 【问题描述】:我需要能够访问委托回调方法,pictureInPictureControllerDidStopPictureInPicture(_:)
的原生 AVPictureInPictureController
的 WKWebView
。 AVPictureInPictureController
没有像旧的 MPMoviePlayerViewController
那样的全局通知事件,我无法创建自己的 AVPictureInPictureController
实例以与 Web 视图一起使用来访问委托回调。我找不到关于如何连接到 WKWebView
对象的这个内部 AVPictureInPictureController
的文档。我希望至少有一些方法可以使用 KVO。
https://developer.apple.com/library/content/documentation/WindowsViews/Conceptual/AdoptingMultitaskingOniPad/QuickStartForPictureInPicture.html
WebKit 框架提供了 WKWebView 类,在 ios 9 中支持画中画。
https://developer.apple.com/documentation/avkit/avpictureinpicturecontrollerdelegate/1614717-pictureinpicturecontrollerdidsto
【问题讨论】:
【参考方案1】:我发现有一个名为PGPictureInPictureProxyPictureInPictureActiveChangedNotification
的通知,当视频移动到画中画时调用,然后在画中画关闭时调用。我确信它可以随时更改或删除,但它现在似乎可以正常工作。
【讨论】:
【参考方案2】:如果您可以访问您的 AVPictureInPictureController
,您可以简单地设置它的委托并实现回调
class MyWebView: WKWebView
self.myPictureInPictureController.delegate = self
extension MyWebView: AVPictureInPictureControllerDelegate
func pictureInPictureControllerDidStopPictureInPicture(_ pictureInPictureController: AVPictureInPictureController)
//code
【讨论】:
我没有创建独立的AVPictureInPictureController
。我依赖于WKWebView
内部的那个。
我尝试按照您的建议进行子类化,但它仍然无法让我访问内部 AVPictureInPictureController。我需要利用 WKWebView 版本,因为我正在使用自定义 javascript 视频播放器加载预贴广告和视频。在 AVPictureInPictureController 中创建我自己的 AVPlayer 不会给我这种能力。以上是关于访问 WKWebView 的 AVPictureInPictureController 的委托回调的主要内容,如果未能解决你的问题,请参考以下文章
从源 WKWebView (window.opener) 访问 javascripts 函数
使用 JavaScript 访问 WKWebView 中的本地文件
嵌入在 WKWebView 加载的 HTML 文件中的 JavaScript 是不是可以访问?