访问 WKWebView 的 AVPictureInPictureController 的委托回调

Posted

技术标签:

【中文标题】访问 WKWebView 的 AVPictureInPictureController 的委托回调【英文标题】:Accessing delegate callback of AVPictureInPictureController for a WKWebView 【发布时间】:2018-03-20 20:08:21 【问题描述】:

我需要能够访问委托回调方法,pictureInPictureControllerDidStopPictureInPicture(_:) 的原生 AVPictureInPictureControllerWKWebViewAVPictureInPictureController 没有像旧的 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 中的本地文件

iOS 10.3 WKWebView 访问照片库时崩溃

嵌入在 WKWebView 加载的 HTML 文件中的 JavaScript 是不是可以访问?

ionic 3 在 WKWebView 中启用摄像头和麦克风访问

iOS:WKWebview 如何允许位于 bundle 中的 html 文件对文档目录进行读取访问