我使用Swift上一版和xcode 8.3.3制作了一个简单的浏览器。 我希望能够在有html5视频(如在youtube上)时全屏输入。 我得到"全屏不可用"现在在youtube上。 与旧的WebView相同的问题...在iOS上运行。
EDIT。也许这是不可能的。我试着看看JavaFX WebView和WPF WebBrowser,它们也有同样的局限性。实际上有一个人能够在WPF WebBrowser上允许全屏显示youtube视频,但只能创建一个完整的html页面: Playing youtube in full screen in WebBrowser control
当然,我无法为页面中的每个视频创建一个网页(至少我不知道如果你知道如何告诉我)。
原始讯息: 我用Swift最后一个版本和xcode 8.3.3创建了一个简单的浏览器。 一切正常,但我无法激活插件,就像我可以使用旧的WebView一样。 因为我在Mac上我应该能够激活插件(我明白它在iOS上是不可能的)我错了吗?
另外(这里我在旧的WebView中遇到同样的问题)没有办法激活html5视频的全屏(至少我不知道如何)。
@IBOutlet weak var webView: WKWebView!
let urlString = "http://myurl.com/"
self.webView.load(NSURLRequest(url: NSURL(string: urlString)! as URL) as URLRequest!)
self.webView.configuration.preferences.plugInsEnabled = true
这是使基本浏览器正常工作的真正基本代码。但是没有选择在Interface Builder for WKWebView中启用插件,我真的不知道如何允许全屏显示html5视频(如youtube)。
EDIT。好的,我终于找到了插件部分的答案: self.webView.configuration.preferences.plugInsEnabled = true
非常简单,但很难理解在哪里找到它我必须去这里: https://developer.apple.com/documentation/webkit/webpreferences 猜猜......
答案 0 :(得分:4)
您可以通过在配置中使用 KVO 更改属性来完成此操作,而不是使用私有 API。
使用 Swift 5:
let configuration = WKWebViewConfiguration()
configuration.preferences.setValue(true, forKey: "fullScreenEnabled")
let webView = WKWebView(frame: .zero, configuration: configuration)
在 macOS 10.15 和 11 上测试
答案 1 :(得分:2)
@SoneeJohn 发布的解决方案很清楚,但它涉及使用桥接头。我以前从未手动使用过 Objective-C 或修改过的私有 Swift 框架。我不知道该使用什么关键字。而且,我发现的资源似乎更多地涉及并专注于创建原始框架 - 而不是改变现有框架。我不知道这是否是正确的实现,但它有全屏模式可以在网络视图中工作。
在下一部分中,有一些照片参考了以下每个步骤。
#import <WebKit/WebKit.h>
@interface WKPreferences ()
-(void)_setFullScreenEnabled:(BOOL)fullScreenEnabled;
@end
webView.configuration.preferences._setFullScreenEnabled(true)
webView.customUserAgent = """
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13) AppleWebKit/604.1.31 (KHTML, like Gecko) Version/11.0 Safari/604.1.31
"""
答案 2 :(得分:1)
要允许WKWebView
使用全屏HTML,您需要访问WKPreferences
中的私有API(请参阅https://github.com/WebKit/webkit/blob/master/Source/WebKit/UIProcess/API/Cocoa/WKPreferences.mm#L232-L240)。由于您在桥接标头中使用Swift,因此添加:
#import <WebKit/WebKit.h>
@interface WKPreferences ()
-(void)_setFullScreenEnabled:(BOOL)fullScreenEnabled;
@end
简单地称呼它:
let webView = WKWebView(frame: view.frame)
webView.configuration.preferences._setFullScreenEnabled(true)
如果您在退出全屏模式后发现网页视图的大小发生奇怪的变化,我发现这可以解决此问题:
webView.autoresizingMask = [.width, .height]
view.addSubview(webView)
webView.translatesAutoresizingMaskIntoConstraints = false
webView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
webView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
webView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
webView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
注意:由于您正在访问私有API,因此在Mac App Store中将被拒绝。
答案 3 :(得分:0)
答案是没有答案。现在没有API在Mac上获取全屏html5。我尝试在Windows上制作相同的应用程序,当前的UWP WebView能够全屏显示(WPF的旧WebBrowser无法全屏显示)。
我认为获得它的唯一方法是向苹果提交反馈。