【问题标题】:CefSharp WPF web browser is not displayed Or renderedCefSharp WPF Web 浏览器不显示或渲染
【发布时间】: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) 子小部件,我将在其中显示网络浏览器..当窗口打开时它显示为空白。

如果我遗漏了什么,请告诉我

【问题讨论】:

    标签: c# webview cefsharp


    【解决方案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】:

      我能想到前三个潜在问题。但是很难仅从您的代码中判断真正的问题是什么,因为它与官方示例有点偏离

      1. Cef.Initialize() 移动到您的 MainWindow 构造函数。它应该只被调用一次来启动CefSharp.BrowserSubprocess.exe 渲染器进程。

      2. 查看我对CefSharp 3 always failing Cef.Initialize() 的回答,了解有关二进制文件及其位置的一些检查事项。 确实,推荐的方法是首先运行 CefSharp.MinimalExample 存储库中的 WPF 示例,然后从那里根据您的用例进行调整。

      3. 如果没有明确设置宽度和高度,我不确定 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 的高度和宽度。如果您不知道确切的大小,将HorizontalAlignmentVerticalAlignment 设置为Stretch(填充父容器)可能也可以。

      您是否检查过Cef.Initialize() 是否真的返回true?您可能会丢失一些文件,并且在这种情况下,CefSharp 并不总是给出明确的错误消息。

      【讨论】:

        猜你喜欢
        • 2014-06-09
        • 2015-11-10
        • 1970-01-01
        • 2017-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多