2013-01-07 188 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