我怎样才能在 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();
}
}
[编辑]
我已经尝试了两种解决方法(在制作此 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();
}
}