2

WebBrowser ControlwebBrowser1.DocumentText. を設定すると、HTML タグ内の属性が再配置されるようです。

欠けているレンダリング モードまたはドキュメント エンコーディングがあるかどうか疑問に思っています。RichTextBoxControl私の問題は、 (txt_htmlBody) と WebBrowser コントロール (webBrowser1) を Windows フォームに追加するだけで確認できます。

webBrowser1 WebBrowser コントロールを追加し、イベント ハンドラーを追加します。webBrowser1_DocumentCompleted

これを使用して、マウス クリック イベントを Web ブラウザー コントロールに追加しました。

  private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        // Attach an event to handle mouse clicks on the web browser
        this.webBrowser1.Document.Body.MouseDown += new HtmlElementEventHandler(Body_MouseDown);
    }

マウス クリック イベントでは、どの要素がクリックされたかを取得します。

   private void Body_MouseDown(Object sender, HtmlElementEventArgs e)
    {
        // Get the clicked HTML element
        HtmlElement elem = webBrowser1.Document.GetElementFromPoint(e.ClientMousePosition);

        if (elem != null)
        {
            highLightElement(elem);

        }
    }

    private void highLightElement(HtmlElement elem)
    {

        int len = this.txt_htmlBody.TextLength;
        int index = 0;

        string textToSearch = this.txt_htmlBody.Text.ToLower(); // convert everything in the text box to lower so we know we dont have a case sensitive issues
        string textToFind = elem.OuterHtml.ToLower();
        int lastIndex = textToSearch.LastIndexOf(textToFind); 
        // We cant find the text, because webbrowser control has re-arranged attributes in the <img> tag
        // Whats rendered by web browser: "<img border=0 alt=\"\" src=\"images/promo-green2_01_04.jpg\" width=393 height=30>"
        // What was passed to web browser from textbox: <img src="images/PROMO-GREEN2_01_04.jpg" width="393" height="30" border="0" alt=""/>
        // As you can see, I will never be able to find my data in the source because the webBrowser has changed it

    }

txt_htmlBody RichTextBoxフォームに追加し、RichTextBoxイベントの TextChanged を設定しWebBrowser1.DocumentTextRichTextBox(txt_htmlBody) テキストの変更を設定します。

   private void txt_htmlBody_TextChanged(object sender, EventArgs e)
    {
        try
        {

            webBrowser1.DocumentText = txt_htmlBody.Text.Replace("\n", String.Empty);

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

プログラムを実行するときは、次の例の HTML を txt_htmlBody にコピーし、右側の画像をクリックして、highLightElement をデバッグします。WebBrowserコントロールが属性を再配置するため、検索文字列で指定されたテキストが見つからない理由が私のコメントでわかります。

<img src="images/PROMO-GREEN2_01_04.jpg" width="393" height="30" border="0" alt=""/>

WebBrowser コントロールに HTML をそのままレンダリングさせる方法を知っている人はいますか?

お時間をいただきありがとうございます。

4

1 に答える 1