我目前正在开发一个CefSharp项目,目前我正致力于在我的应用程序中全屏打开HTML5视频 .
我在互联网上搜索了关于这种事件如何运作的答案,我还不太了解 .
我的winforms项目我已经走到了这一步:
public partial class Form1 : Form
{
public ChromiumWebBrowser chromeBrowser;
public Form1()
{
InitializeComponent();
InitializeChromium();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void InitializeChromium()
{
CefSettings settings = new CefSettings();
Cef.Initialize(settings);
chromeBrowser = new ChromiumWebBrowser("http://youtube.com/");
this.Controls.Add(chromeBrowser);
chromeBrowser.Dock = DockStyle.Fill;
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
Cef.Shutdown();
}
}
但每次我加载YouTube视频(或来自不同网站的视频)并点击"Fullscreen"按钮时,视频只会填充应用程序,而不是整个显示器屏幕 . 我想这是因为我还没有从IDisplayHandler接口实现 OnFullscreenModeChange 方法 .
在我寻找答案的过程中,我看到我可以使用一种方法来重载CefSharp的IDisplayHandler.OnFullscreenModeChange方法,如下所示:
class DisplayHandler : IDisplayHandler
{
...
void IDisplayHandler.OnFullscreenModeChange(IWebBrowser browserControl, IBrowser browser, bool fullscreen)
{
var chromiumWebBrowser = (ChromiumWebBrowser)browserControl;
chromiumWebBrowser.InvokeOnUiThreadIfRequired(() =>
{
if (fullscreen)
{
parent = chromiumWebBrowser.Parent;
parent.Controls.Remove(chromiumWebBrowser);
fullScreenForm = new Form();
fullScreenForm.FormBorderStyle = FormBorderStyle.None;
fullScreenForm.WindowState = FormWindowState.Maximized;
fullScreenForm.Controls.Add(chromiumWebBrowser);
fullScreenForm.ShowDialog(parent.FindForm());
}
else
{
fullScreenForm.Controls.Remove(chromiumWebBrowser);
parent.Controls.Add(chromiumWebBrowser);
fullScreenForm.Close();
fullScreenForm.Dispose();
fullScreenForm = null;
}
});
}
...
}
所以我的问题是:如何将此重载添加到我的ChromiumWebBrowser控件?
2 回答
请完整实现IDisplayHandler接口,如下所示:
并在WinForm上使用新的displayhandler分配给ChromiumWebBrowesr,示例代码显示如下:
我通过使用GeckoFX Web浏览器而不是使用CefSharp解决了这个问题 .
由于版本45中的FullScreen API存在问题,我选择使用GeckoFX版本33 .
我的解决方案