我怎样才能在 webBrowser 控件上 "Highlight" 搜索词?

How can I "Highlight" a search word at webBrowser control?

[编辑]

我已经尝试了两种解决方法(在制作此 post 之前)。 他们两个都没有工作。 执行流程从来没有进入它(是的,它应该是..)。

-我猜,应该有一些错误,不可见的错误。这可以防止执行流程进入其中。该程序显示了一些屏幕,虽然它看起来像一个正常的屏幕,但它不是。这是一种半地方。

 if (e.Url.AbsolutePath == (sender as WebBrowser).Url.AbsolutePath)   

 if (webBrowser1.ReadyState == WebBrowserReadyState.Complete) 

[结束编辑]

我在 Google 搜索了单词 "stomach" 并用 Yellow_color 高亮显示了它。

我取得了不错的成绩

public static string myTerm = "stomach";   
private void Form1_Load(object sender, EventArgs e)
{
    webBrowser1.Navigate("https://www.google.co.kr/search?&q=" + myTerm);                       
    webBrowser1.ScriptErrorsSuppressed = true;
    WindowState = FormWindowState.Maximized;
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{   
    IHTMLDocument2 myDoc = webBrowser1.Document.DomDocument as IHTMLDocument2;
    StringBuilder myContents = new StringBuilder(myDoc.body.outerHTML);
    string myColoring = "<span style='background-color:yellow'>" + myTerm + "</span>";
    myContents.Replace(myTerm, myColoring);
    Regex myRex = new Regex(myColoring);
    myDoc.body.innerHTML = myRex.Replace(myContents.ToString(), myTerm, 6);  
    // I do not want to see codes at search_textbox itself, so I figured out '6' is a good number.
}

现在,我对 Local_Website 使用了相同的代码。

这次是无限循环

我猜搜索文本框一次又一次。

public static string myTerm = "stomach";   
private void Form1_Load(object sender, EventArgs e)
{
    webBrowser1.Navigate("http://www.kmle.co.kr/search.php?Search=" + myTerm);                      
    webBrowser1.ScriptErrorsSuppressed = true;
    WindowState = FormWindowState.Maximized;
}
int myCount = 0;
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    if (myCount == 10)   //  I do not want endless loop.
        return;
    myCount++;
    IHTMLDocument2 myDoc = webBrowser1.Document.DomDocument as IHTMLDocument2;
    StringBuilder myContents = new StringBuilder(myDoc.body.outerHTML);
    string myColoring =  "<span style='background-color:yellow'>" + myTerm + "</span>";
    myContents.Replace(myTerm, myColoring);
    myDoc.body.innerHTML = myContents.ToString();
}

有什么好的提示吗?我怎样才能有我的目标?

您的问题是多次触发 DocumentCompleted()。 它适用于 Google,因为他们的网站是 "simpler"(没有 ajax 或隐藏框架),与您尝试加载的网站不同。

尝试将您的代码限制为仅在文档实际加载完成时调用

if ( (e.Url.AbsolutePath == (sender as WebBrowser).Url.AbsolutePath) ) 
{
    //do your magic here.
}; 

因此您的文档完整功能应如下所示:

    private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        if (e.Url.AbsolutePath == (sender as WebBrowser).Url.AbsolutePath)
        { 
            IHTMLDocument2 myDoc = webBrowser1.Document.DomDocument as IHTMLDocument2;
            StringBuilder myContents = new StringBuilder(myDoc.body.outerHTML);
            string myColoring = "<span style='background-color:yellow'>" + myTerm + "</span>";
            myContents.Replace(myTerm, myColoring);
            myDoc.body.innerHTML = myContents.ToString();
        }
    }