2013-01-07 142 views
2

我试图做一个C#Windows窗体应用程序,与网页浏览器。Webkit.Net等待要完全加载页面

我使用WebKit浏览器:Link to the browser

web浏览器做了我放在一个类文件,这样我就可以通过所有形式我要去使用它存取权限。

说的生成web浏览器的代码:

public static WebKit.WebKitBrowser mainBrowser = new WebKitBrowser(); 
我在这一块的,让代码

的一些问题:

globalVars.mainBrowser.Navigate("http://www.somesite.com/"); 
while (globalVars.mainBrowser.IsBusy) 
    { 
     System.Threading.Thread.Sleep(500); 
    } 
globalVars.mainBrowser.Document.GetElementById("user").TextContent = "User Name"; 

但它不工作。如果我在一段时间后,做一个消息框,它显示了它之前可能呈现页面...

那么,什么是等到现场满载的最佳方式?

更新1

在一个独立的类文件,我是使得WebKit的控制研究是这样的:

public static WebKit.WebKitBrowser mainBrowser = new WebKitBrowser(); 

而在一个形式,我现在得到这个代码(感谢Tearsdontfalls ):

public void loginthen() 
    { 
     globalVars.mainBrowser.DocumentCompleted += mainBrowser_DocumentCompleted; 
     globalVars.mainBrowser.Navigate("http://www.somesite.com/");  
    } 

void mainBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
{ 
    var send = sender as WebKit.WebKitBrowser; 
    if (send.Url == e.Url) 
    { 
     MessageBox.Show("Inloggen"); 
     globalVars.mainBrowser.Document.GetElementById("user").TextContent = "User Name"; 
    } 
} 

但没有消息框出现。但是,如果我使用本地(在相同的形式)webkit浏览器,我得到的MessageBox。但随后的用户字段没有填写。

即使是在documentCompleted事件断点,不triggerd。所以它看起来像事件听者不工作...

那么为什么不工作?

+0

也许文件完成事件是一个选项? – Tearsdontfalls

+0

@Tearsdontfalls,mayby。但是代码将如何看起来像那样?因为我是从这样的形式并不总是... – Mathlight

回答

2

您可以直接在您的网页浏览上创建文件已完成事件的事件监听器,或者你可以动态创建这样的:

globalVars.mainbrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(mainbrowser_DocumentCompleted); 

哪里mainbrowser_DocumentCompleted是空在那里你可以做某事的名称等这(我用你提供的代码名称):

void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { 
    var send = sender as WebKit.WebKitBrowser; 
    if (send.Url == e.Url) { 
     globalVars.mainBrowser.Document.GetElementById("user").TextContent = "User Name"; 
    } 
} 
+0

很抱歉,但如果我在事件的if语句做一个消息框,它显示不出来... 我将更新更多的一些信息的问题.. – Mathlight

+0

好吧,我更新的代码(添加新WebBrowserDocumentCompletedEventHandler(browser_DocumentCompleted)添加事件处理程序)。也许这样做的窍门,如果没有:你有导航/导航事件中的任何代码,这可能会取消浏览? – Tearsdontfalls

+0

它仍然没有到达断点(我设置了'var send = sender ....' 而我没有任何其他代码比我在更新的问题(关于网页浏览器然后) 我必须先做一些事情的webkit浏览器本身才可以浏览? (注意,我没有在表格上的任何地方显示它) – Mathlight

0

添加下面的代码段让事件触发时,浏览器是不可见模式。

using (Bitmap bmp = new Bitmap(webKitBrowser.Width, webKitBrowser.Height)) 
{ 
    webKitBrowser.DrawToBitmap(
     bmp, 
     new Rectangle(
      webKitBrowser.Location.X, 
      webKitBrowser.Location.Y, 
      webKitBrowser.Width, 
      webKitBrowser.Height 
     ) 
    ); 
} 
+1

谢谢你回答我的问题。这是几年后,我没有具体的项目,所以我无法测试它。但也许这将有助于未来的人! – Mathlight

+0

当然,这是我加入的一点。在发现了一些错误之后,我已经想到了这一点。奇怪的是,虽然它不允许事件发生。我将此用作非Windows应用程序的一部分。 – stak