2014-07-17 60 views
2
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中搜索,但沒有找到任何其他信息。Awesomium offscreen webview永不加載頁面

+0

控件不這樣的。他們應該放在形式上。 –

+0

@DmitryDovgopoly你確定你在說Awesomium嗎?根據這個http://wiki.awesomium.net/general-use/introduction-to-web-views.html屏幕外(即沒有表單),「WebView」是可能的。 –

+0

我相信控制。但WebView不是一個控件,所以我錯誤地放置在窗體上。 –

回答

7

我做了一些研究,發現指令here

等待網頁加載完成後

而(查看 - > 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說明更多的信息。

+0

謝謝!出於某種原因,我認爲WebCore在內部創建更新線程... –

+0

我獲得此消息「不支持在現有消息循環的線程上啓動更新循環。」使用WebCore.Run()。如果不使用Run(),則WebCore始終使用IsLoading爲true。 – dlopezgonzalez

1

我這樣做&似乎運作良好

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