xcode WKWebView Mac浏览器启用全屏html5?

nnsrf1az  于 2023-01-18  发布在  Mac
关注(0)|答案(4)|浏览(355)

我用Swift上一个版本和xcode 8.3.3做了一个简单的浏览器。我希望在有html5视频的时候能够全屏进入(就像在YouTube上一样)。我现在在YouTube上得到“全屏不可用”。旧的WebView也有同样的问题...在iOS上它可以工作。
编辑。也许这是不可能的。我试着看看JavaFX WebView和WPF WebBrowser,它们有同样的限制。实际上,有一个家伙能够允许在WPF WebBrowser上全屏播放YouTube视频,但只有创建一个完整的html页面:在WebBrowser控件中全屏播放youtube
当然,我不能为一个页面中的每个视频创建一个网页(至少我不知道如何创建,如果你知道请告诉我)。
原始消息:我用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的界面生成器中没有启用插件的选项,我真的不知道如何让html5视频全屏(像youtube)。
好的,我终于找到了插件部分的答案:自我.网络视图.配置.首选项.插件已启用=真
真的很容易,但很难理解在哪里可以找到它,我不得不去这里:然后猜一猜...

n3ipq98p

n3ipq98p1#

macOS 12.3的更新

从iOS 15.4和macOS 12.3开始,WKPreferences有了新的属性isElementFullscreenEnabled,现在非常简单。

myWebView.configuration.preferences.isElementFullscreenEnabled = true

原始答案(macOS 12.3之前版本)

除了使用私有API,您还可以通过在配置中使用KVO更改属性来实现这一点。
使用Swift 5:

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

在macOS 10.15和11上测试

6yjfywim

6yjfywim2#

要允许WKWebView使用全屏HTML,您需要访问WKPreferences中的私有API(参见https:可可-L240)。

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

k2fxgqgv

k2fxgqgv3#

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

步骤
在下一节中,有一些照片引用了以下每个步骤。
1.在XCode中单击您的"项目
1.点击"添加目标"
1.点击"可可框架"
1.点击"下一步"
1.在"产品名称"中输入标题
1.点击"完成"
1.单击"链接的框架和库"中的"添加项目"
1.在"搜索"中输入"WebKit"
1.点击"WebKit.框架"
1.点击"添加"
1.单击"Project. h"文件
1.从解决方案中添加"Import"代码

#import <WebKit/WebKit.h>

1.从解决方案中添加"全屏"代码

@interface WKPreferences ()
-(void)_setFullScreenEnabled:(BOOL)fullScreenEnabled;
@end

1.将您的"项目框架"导入您的swift文件
1.在您的Web视图中实现"全屏"代码

webView.configuration.preferences._setFullScreenEnabled(true)

1.我不得不将用户代理更改为Safari11,以使全屏模式正常工作。

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
"""
4bbkushb

4bbkushb4#

答案是没有答案。现在Mac上没有API可以获得全屏HTML5。我试着在Windows上制作同样的应用程序,UWP目前的WebView能够全屏(WPF的旧WebBrowser不能全屏)。
我认为唯一的办法就是向苹果提交反馈。

相关问题