CefSharp WPF Web 浏览器不显示或渲染
Posted
技术标签:
【中文标题】CefSharp WPF Web 浏览器不显示或渲染【英文标题】:CefSharp WPF web browser is not displayed Or rendered 【发布时间】:2015-04-14 11:23:39 【问题描述】:我是 CefSharp 的新手 我创建了一个类库项目并引用了 CefSharp 库来呈现 Web 浏览器,但是我在显示 Web 浏览器时遇到了一些问题。请找到确切的代码
WebBrowser_test1:
public partial class ChildWidget : Window
public CefSharp.Wpf.ChromiumWebBrowser webView;
public Widget()
InitializeComponent();
CefSharp.CefSettings settings = new CefSharp.CefSettings();
settings.PackLoadingDisabled = true;
if (CefSharp.Cef.Initialize(settings))
webView = new CefSharp.Wpf.ChromiumWebBrowser();
main_grid.Children.Add(webView);
webView.Address = "http://www.google.co.uk";
我在另一个项目中引用了这个库(dll)
public MainWindow()
InitializeComponent();
Button newbutton = new Button();
newbutton.Width = 50;
main_grid.Children.Add(newbutton);
newbutton.Click += ButtonClick;
private void ButtonClick(object sender, RoutedEventArgs e)
try
Webbrowser_test1.ChildWidget childWidget = new Widget();
childWidget.Show();
catch (Exception)
throw;
现在点击按钮,我将打开 (WebBrowser_test1) 子小部件,我将在其中显示网络浏览器..当窗口打开时它显示为空白。
如果我遗漏了什么,请告诉我
【问题讨论】:
【参考方案1】:在创建ChromiumWebBrowser
后订阅IsBrowserInitializedChanged
。然后一旦浏览器初始化,你可以调用Load
,你的控件就会显示出来。
...
_browser = new ChromiumWebBrowser();
mainGrid.Children.Add(_browser);
_browser.IsBrowserInitializedChanged += OnIsBrowserInitializedChanged;
...
void OnIsBrowserInitializedChanged(object sender, DependencyPropertyChangedEventArgs e)
if (_browser.IsBrowserInitialized)
_browser.Load("https://www.google.com/");
【讨论】:
【参考方案2】:我能想到前三个潜在问题。但是很难仅从您的代码中判断真正的问题是什么,因为它与官方示例有点偏离
将 Cef.Initialize()
移动到您的 MainWindow
构造函数。它应该只被调用一次来启动CefSharp.BrowserSubprocess.exe
渲染器进程。
查看我对CefSharp 3 always failing Cef.Initialize() 的回答,了解有关二进制文件及其位置的一些检查事项。 确实,推荐的方法是首先运行 CefSharp.MinimalExample 存储库中的 WPF 示例,然后从那里根据您的用例进行调整。
如果没有明确设置宽度和高度,我不确定 ChromiumWebBrowser()
是否有效。 0x0 窗口可能不会接收任何呈现的内容。我没有尝试过使用最近的代码。
【讨论】:
您好@Jornh,我遇到了类似的问题,但是当我在 Visual Studio 上运行该应用程序时,它运行良好,但是当我发布时,它一直加载空白页面而不是常规 UI。我还查看了如何发布一次单击应用程序,但这似乎是正确的。你对我有什么建议吗?我已经为此苦苦挣扎了几天。 很抱歉,我与 CefSharp 合作已有几年了。我唯一能建议的是通常的东西,可能会在你的部署中寻找丢失的 DLL 和常见的东西,比如错误,如果你可以附加一个调试器。【参考方案3】:您是否尝试过替换
webView.Address = "http://www.google.co.uk";
与
webView.Load("http://www.google.co.uk");
【讨论】:
是的,我已经尝试使用 webView.Load("google.co.uk"); 但我仍然无法完成此操作。 嗯,这通常绝对有效,而且 cefsharp 很棒,所以我认为这是你想要的“控制”用法中略带异国情调的“控制”。我的直觉说这是一生的问题。我建议不要在控件构造函数中调用 Load (正如你所说的你现在正在调用的)。您需要先让 CEF 将 dll ( ~20Mb ) 加载到内存中并初始化。有一个 IsBrowserInitialised 事件可以提供帮助。我还建议创建一个不使用控件的新项目,它只需加载和 CEFSharp 并显示一个网页以熟悉 cef。【参考方案4】:就像 jornh 提到的那样,您可能必须明确设置 ChromiumWebBrowser
的高度和宽度。如果您不知道确切的大小,将HorizontalAlignment
和VerticalAlignment
设置为Stretch
(填充父容器)可能也可以。
您是否检查过Cef.Initialize()
是否真的返回true
?您可能会丢失一些文件,并且在这种情况下,CefSharp 并不总是给出明确的错误消息。
【讨论】:
以上是关于CefSharp WPF Web 浏览器不显示或渲染的主要内容,如果未能解决你的问题,请参考以下文章
使用 CEFSharp Web 浏览器的 WPF 应用程序在 clickonce 版本中崩溃