Awesomium offscreen webview永远不会加载页面

时间:2014-07-17 13:45:08

标签: c# awesomium

public class Program
{
    static void Main(string[] args)
    {
        var session = WebCore.CreateWebSession(new WebPreferences { WebSecurity = false });
        var browser = WebCore.CreateWebView(1920, 3000, session, WebViewType.Offscreen);
        WebCore.ShuttingDown += WebCoreOnShuttingDown;
        browser.ConsoleMessage += BrowserOnConsoleMessage;
        browser.LoadingFrameComplete += BrowserOnLoadingFrameComplete;
        browser.DocumentReady += BrowserOnDocumentReady;
        browser.Source = new Uri("http://www.google.ru/");
        var error = browser.GetLastError();
        Console.ReadKey();
    }

    private static void BrowserOnConsoleMessage(object sender, ConsoleMessageEventArgs consoleMessageEventArgs)
    {

    }

    private static void WebCoreOnShuttingDown(object sender, CoreShutdownEventArgs coreShutdownEventArgs)
    {

    }

    private static void BrowserOnDocumentReady(object sender, UrlEventArgs urlEventArgs)
    {

    }

    private static void BrowserOnLoadingFrameComplete(object sender, FrameEventArgs frameEventArgs)
    {

    }
}

它不起作用。这些事件都没有被解雇。 errorNone。 我敢肯定我会错过一些明显的东西。是否应该以某种方式另外初始化WebView?我在Awesomium Wiki中搜索但没有找到任何其他信息。

2 个答案:

答案 0 :(得分:7)

我做了一些研究并找到了指令here

  

等到页面完成加载

     

while(view-> IsLoading())
  web_core->更新();

<。>在.Net中,WebCore.Update已被弃用且有说明:

  

在非UI环境中(甚至在UI应用程序中),您现在可以   为Awesomium创建一个专用的线程,并从该线程中使用   WebCore.Run开始自动更新。

所以我创建了这个代码示例:

static void Main(string[] args)
{
    Task t = new Task(() =>
    {
        WebCore.Initialize(new WebConfig(), true);
        WebView browser = WebCore.CreateWebView(1024, 768, WebViewType.Offscreen);
        browser.DocumentReady += browser_DocumentReady;
        browser.Source = new Uri("https://www.google.ru/");
        WebCore.Run();
    });
    t.Start();
    Console.ReadLine();
}
static void browser_DocumentReady(object sender, UrlEventArgs e)
{
    Console.WriteLine("DocumentReady");
}

您可以在WebCore.Run说明中找到更多信息。

答案 1 :(得分:1)

我这样做&amp;似乎运作良好

 static void Main(string[] args)
 {
     var session = WebCore.CreateWebSession(new WebPreferences { WebSecurity = false });
     using (WebView webViewBrowser = WebCore.CreateWebView(1024, 768, session, WebViewType.Offscreen))
     {
         webViewBrowser.ConsoleMessage += webViewBrowser_ConsoleMessage;
         webViewBrowser.LoadingFrameComplete += webViewBrowser_LoadingFrameComplete;

         webViewBrowser.Source = new Uri("http://www.google.ru/");

         if (WebCore.UpdateState == WebCoreUpdateState.NotUpdating) WebCore.Run();
     }
 }

 static void webViewBrowser_ConsoleMessage(object sender, ConsoleMessageEventArgs e)
 {
     Debug.Print("{0} at {1}: {2} at '{3}'", e.EventName, e.LineNumber, e.Message, e.Source);
 }

 static void webViewBrowser_LoadingFrameComplete(object sender, FrameEventArgs e)
 {
     if (!e.IsMainFrame) return;

     WebView webViewBrowser = sender as WebView;

     Console.WriteLine(String.Format("Page Title: {0}", webViewBrowser.Title));
     Console.WriteLine(String.Format("Loaded URL: {0}", webViewBrowser.Source));

     BitmapSurface surface = (BitmapSurface)webViewBrowser.Surface;
     surface.SaveToPNG("result.png", true);

     WebCore.Shutdown();
 }