2017-02-23 13 views
0

[編集]WebBrowserコントロールで検索語を「強調表示」するにはどうすればよいですか?

私はすでにこの記事を作成する前に2つの回避策を試しました。 両方とも動作していませんでした。 実行の流れは決してそれに入っていませんでした(はい、そうでしょう)。

- おそらく、いくつかのエラー、目に見えないエラーがあるはずです。それは、エクセプションの流れがそこに入るのを防ぎます。通常のプログラムのように見えますが、そうではありません。それは半分の場所の一種です。

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

または

if (webBrowser1.ReadyState == WebBrowserReadyState.Complete) 

[終了EDIT]

私はGoogleの言葉 "胃" を検索し、Yellow_color WIHそれをhilightedています。

私は良い結果を出しました。

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に同じコードを使用しました。

今回は無限ループがあります。

私はserachテキストボックスが何度も繰り返されると思います。

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

良いヒントはありますか?どうすれば目標を達成できますか?

答えて

0

DocumentCompleted()を複数回起動すると問題が発生します。 これは、ロードしようとしているウェブサイトとは対照的に、ウェブサイトが「シンプル」(ajaxまたは隠されたフレームがない)なので、Google上で動作します。

は、文書が実際に

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

感謝を。ナー.......私はそれらの2つのラインを試してみました。 //(WebBrowser1.ReadyState == WebBrowserReadyState.Complete)\tの場合、それらは機能しませんでした。彼らは捕まえられなかった。私は役に立たないことを意味する。 Absoulutely。 – Jason

関連する問題