【问题标题】:WKWebView Mac Browser Enable fullscreen html5?WKWebView Mac 浏览器启用全屏 html5?
【发布时间】:2017-12-12 18:45:25
【问题描述】:

我使用 Swift 最新版本和 xcode 8.3.3 制作了一个简单的浏览器。 当有 html5 视频(比如在 youtube 上)时,我希望能够全屏输入。 我现在在 youtube 上收到“全屏不可用”。 旧的 WebView 也有同样的问题......在 iOS 上它可以工作。

编辑。也许这是不可能的。我尝试查看 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

这是让基本浏览器正常工作的真正基本代码。但是没有选项可以在 WKWebView 的 Interface Builder 中启用插件,我真的不知道如何允许全屏显示 html5 视频(如 youtube)。

编辑。好的,我终于找到了插件部分的答案: self.webView.configuration.preferences.plugInsEnabled = true

真的很容易,但很难理解在哪里可以找到它我不得不去这里: https://developer.apple.com/documentation/webkit/webpreferences 猜一猜……

【问题讨论】:

    标签: xcode macos html5-video fullscreen wkwebview


    【解决方案1】:

    @SoneeJohn 发布的解决方案很明确,但它涉及使用桥接头。我以前从未手动使用过 Objective-C 或修改过的私有 Swift 框架。我不知道该使用什么关键字。而且,我发现的资源似乎更多地涉及并专注于创建原始框架 - 而不是改变现有框架。我不知道这是否是正确的实现,但它具有全屏模式以在 Web 视图中工作。

    步骤

    在下一节中有参考以下每个步骤的照片。

    1. 在 XCode 中单击“项目”
    2. 点击“添加目标”
    3. 点击“Cocoa 框架”
    4. 点击“下一步”
    5. 在“产品名称”中输入标题
    6. 点击“完成”
    7. 点击“Linked Frameworks and Libraries”中的“Add items”
    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
    """
    

    【讨论】:

    • 我无法测试此解决方案(我不再拥有 Mac),但感谢您的回答。多年前真的不可能找到这个答案。
    【解决方案2】:

    您可以通过在配置中使用 KVO 更改属性来代替使用私有 API。

    使用 Swift 5:

    let configuration = WKWebViewConfiguration()
    configuration.preferences.setValue(true, forKey: "fullScreenEnabled")
    let webView = WKWebView(frame: .zero, configuration: configuration)
    

    在 macOS 10.15 和 11 上测试

    【讨论】:

    • 谢谢!我让我的代码使用它。现在,看起来 webView 是一个滚动视图,并且上面有滚动条。有没有一种简单的方法可以使用 KVO 禁用 webView 上的滚动条?
    • 我应该澄清一下。非全屏模式时,webView 上有水平和垂直滚动条。
    • 在我看来,内容可能比 WebView 大,或者可能是缩放的。也许您想针对该问题创建一个新问题,包含更多详细信息@SouthernYankee65?
    【解决方案3】:

    要允许 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)
    

    如果您在退出全屏后发现 Web 视图出现奇怪的大小调整,我发现这可以解决我的问题:

    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 上被拒绝。

    【讨论】:

    • 经过这么长时间,我没想到会有一个很好的答案(而且也是一个正确的答案)。我什至不再使用 mac 作为我的主要操作系统,但我用它来尝试你的答案。谢谢,这行得通。不知道为什么苹果不制作这个公共 API,这正是在 webview 中修复 html5 播放器所需要的。
    • 很棒的解决方案,感谢@Soneé John!我注意到webView 在进行此更改后似乎略有不同。我最终使用了Safari 11 (MacOS) 用户代理——它按预期工作。但是,默认用户代理没有加载视频。而且,chrome 70 (MacOS) 用户代理并未加载所有照片。
    • @TheAltruist 看来你的 github 页面不见了?我试图查看您的文档,但 github 告诉我找不到该页面。
    • @SouthernYankee65,我更改了用户名并删除了我的旧存储库,但我能够恢复与此帖子相关的内容并将其添加为答案。
    【解决方案4】:

    答案是没有答案。 mac 上现在没有 API 来获取全屏 html5。我尝试在 Windows 上制作相同的应用程序,并且 UWP 的当前 WebView 能够全屏(WPF 的旧 WebBrowser 不能全屏)。

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

    【讨论】:

    • macOS 10.13.4 上没有新内容。对 mac os 开发人员来说真是太可惜了。
    • 查看 Soneé John 的回答。确实没有公共 API 可以让全屏工作,但有一个私有 API 可供您使用。
    猜你喜欢
    • 2020-10-12
    • 1970-01-01
    • 2015-11-22
    • 2012-07-02
    • 2013-02-19
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    • 2015-05-07
    相关资源
    最近更新 更多