【问题标题】:CEFSharp Winforms display a loadin message while the website loads?CEFSharp Winforms 在网站加载时显示加载消息?
【发布时间】:2015-06-17 17:59:14
【问题描述】:

我正在使用 Cefsharp 39.0.0 在 winform 中加载网页。现在,当页面加载时,表单是空白的。如何显示加载 gif?

public Browser() {
    InitializeComponent();
    string clientURL = "www.imdb.com";

    ChromiumWebBrowser browser = new ChromiumWebBrowser(clientURL);

    browser.Dock = DockStyle.Fill;

    toolStripContainer.ContentPanel.Controls.Add(browser);


    browser.RegisterJsObject("camera", new Camera());

}

我查看了 NavStateChanged 事件。但我不确定如何使用它在表单中显示来自本地资源的加载图像,直到网页完全加载。

EventHandler < NavStateChangedEventArgs > handler = null;
handler = (sender, args) = > {

    //TODO : show a loading gif until the page load completes

    //Wait for while page to finish loading not just the first frame
    if (!args.IsLoading) {
        browser.NavStateChanged -= handler;

        MessageBox.Show("The page has completed loading", "Load completed", MessageBoxButtons.OK);
       //TODO : once load complete show the actual page
    }
};

【问题讨论】:

    标签: winforms chromium-embedded cefsharp


    【解决方案1】:

    我们的应用程序是 C++,但其中一些可能适用。我们有一个 html 文件作为资源编译到我们的应用程序中,我们将该 URL 传递给 CefBrowserHost::CreateBrowserSync(),在您的情况下,它看起来将是“new ChromiumWebBrowser()”。我们让启动屏幕加载我们想要的真实 URL,同时它显示一个动画 GIF。所以调用可能看起来像

    new ChromiumWebBrowser("http://embeddedsplashscreen.html");
    

    embeddedsplashscreen.html 的主体有

    <body class="splash" onload=" pageLoad() ">
    

    pageLoad() 看起来像

        function pageLoad() {
            window.location = "www.urlyoureallywant.com";
            }          
        }
    

    我们的启动画面有一个由样式表设置的背景和一个动画 gif,一旦请求的 url 进入,它就会消失。

    我不知道 CefSharp 是如何指定本地资源的。在 C++ 中,我们使用了 cefclient 示例中 resource_util_win.cpp 中的技术,特别是 GetResourceId() 用于将 URL 关联到已编译的资源 ID,它通过在硬编码表中匹配 URL 中的文本来实现。

    对于 CefSharp,我发现这些链接可能会有所帮助 - http://thechriskent.com/2014/05/12/use-embedded-resources-in-cefsharp/CefSharp LoadHtml

    【讨论】:

      【解决方案2】:

      Alex Maitland 在Cefsharp google groups 上的回答

      您可以先从本地磁盘加载您自己的“加载页面”,速度非常快。

      第一种方法是使用ResourceHandler(您可以从磁盘加载流)。 https://github.com/cefsharp/CefSharp/blob/master/CefSharp.Example/CefExample.cs#L98 (您还应该使用SchemeHandler,它提供了更多的灵活性,请参阅https://github.com/cefsharp/CefSharp/blob/master/CefSharp.Example/CefSharpSchemeHandler.cs#L46

      CefSharp 完全无关的选项是在控件上覆盖图像并在完成后将其删除。这可能会提供最佳的用户体验。我敢肯定,像stackoverflow这样的地方在一般意义上都有这方面的信息。 请记住,如果您隐藏浏览器实例,它将停止渲染(性能原因),它将继续加载。

      如果您不需要代理支持,那么禁用它应该会稍微加快初始加载速度(相对而言,代理解析需要一段时间) https://github.com/cefsharp/CefSharp/blob/master/CefSharp.Example/CefExample.cs#L39

      【讨论】:

        猜你喜欢
        • 2012-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-24
        • 1970-01-01
        • 2010-09-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多