CEFSharp Winforms在网站加载时显示加载消息?

时间:2015-06-17 17:59:15

标签: winforms chromium-embedded cefsharp

使用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事件。但我不确定如何使用它来显示表格中本地resoruce的加载图像,直到网页完全加载为止。

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
    }
};

2 个答案:

答案 0 :(得分:1)

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

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

我们的embeddedsplashscreen.html正文

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

并且pageLoad()看起来像

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

我们的初始屏幕有一个由样式表和动画gif设置的背景,一旦请求的网址进入,它就会消失。

我不知道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

答案 1 :(得分:0)

来自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