2

Web ブラウザーを使用して、C# Windows フォーム アプリケーションを作成しようとしています。

Webkit ブラウザーを使用しています: ブラウザー へのリンク

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 イベントのブレークポイントでさえ、トリガーされません。イベントリスナーが機能していないようです...

では、なぜ機能しないのでしょうか。

4

2 に答える 2

2

Web ブラウザの Document Completed Event でイベント リスナを作成するか、次のように動的に作成することができます。

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

mainbrowser_DocumentCompletedこのように sth を実行できる void の名前はどこにありますか (提供されたコードの名前を使用しました)。

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";
    }
}
于 2013-01-07T18:05:49.410 に答える
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
        )
    );
}
于 2016-06-08T15:01:07.250 に答える