如何在webBrowser控件中“突出显示”搜索词?

时间:2017-02-23 14:14:44

标签: c# search highlight

[编辑]

我已经尝试了两个解决方法(在发布此帖子之前)。 他们俩都没有工作。 执行流程从未进入过它(是的,应该是......)。

- 我想,应该有一些错误,不可见的错误。这使得exectuion流入其中。该程序显示一些屏幕,虽然它看起来像一个普通的屏幕,但事实并非如此。这是一个半场。

 if (webBrowser1.ReadyState == WebBrowserReadyState.Complete) 

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.
}

[编辑结束]

我在谷歌搜索过“胃”这个词,并用黄色颜色点亮了它。

我的成绩很好。

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();
}

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

这一次,我有无限循环。

我猜serach文本框一次又一次。

takeWhile

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

1 个答案:

答案 0 :(得分:0)

你的问题是多次触发DocumentCompleted()。 它适用于谷歌,因为他们的网站“更简单”(没有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();
        }
    }