WKWebView Mac浏览器启用全屏html5?

时间:2017-07-08 16:14:48

标签: xcode macos html5-video fullscreen wkwebview

我使用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 猜猜......

4 个答案:

答案 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 框架。我不知道该使用什么关键字。而且,我发现的资源似乎更多地涉及并专注于创建原始框架 - 而不是改变现有框架。我不知道这是否是正确的实现,但它有全屏模式可以在网络视图中工作。

步骤

在下一部分中,有一些照片参考了以下每个步骤。

  1. 在 XCode 中单击您的“项目”
  2. 点击“添加目标”
  3. 点击“Cocoa 框架”
  4. 点击“下一步”
  5. 在“产品名称”中输入标题
  6. 点击“完成”
  7. 点击“链接的框架和库”中的“添加项目”
  8. 在“搜索”中输入“WebKit”
  9. 点击“WebKit.framework”
  10. 点击“添加”
  11. 点击您的“Project.h”文件
  12. 从解决方案中添加“导入”代码
#import <WebKit/WebKit.h>
  1. 添加解决方案中的“全屏”代码
@interface WKPreferences ()
-(void)_setFullScreenEnabled:(BOOL)fullScreenEnabled;
@end
  1. 将您的“项目框架”导入您的 swift 文件
  2. 在您的网络视图中实现“全屏”代码
webView.configuration.preferences._setFullScreenEnabled(true)
  1. 我必须将我的用户代理更改为 Safari 11 才能使全屏模式正常工作。
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无法全屏显示)。

我认为获得它的唯一方法是向苹果提交反馈。