2010-01-18 45 views
1

是否有更改webbrowser控件中呈現HTML頁面的方法?我需要的是在我的瀏覽器控件中更改呈現的HTML頁面以突出顯示選定的文本。在Webbrowser控件中更改呈現頁面

我所做的是使用webclient並使用webclient.Downloadstring()獲取頁面的源代碼,突出顯示特定文本,然後在webbrowser中再次編寫它。問題是,隨着該頁面的圖像不會出現,因爲它們被渲染爲相對路徑。

有沒有辦法解決這個問題?有沒有辦法在瀏覽器控件中檢測圖片?

回答

2

不確定爲什麼需要將HTML更改爲lighlight文本,爲什麼不使用IHighlightRenderingServices?

要在加載HTML字符串時指定基本URL,您需要使用文檔的IPersistMoniker接口並在IMoniker實現中指定一個URL。

0

我建議你以不同的方式做,使用webbrowser控件下載並替換文本,這樣你的鏈接就可以工作。你要做的就是更換無論是在用下面的搜索文本框,說搜索詞是「你好」,然後你用下面的替換打招呼所有出現:

<font color="yellow">hello</font> 

當然,這個HTML可更換與SPAN標籤(這是DIV標籤的內聯版本,所以你的線不會使用SPAN中斷,但會使用DIV)。但是,在這兩種情況下,這兩個標籤具有style屬性,在這裏你可以使用CSS來改變其顏色或數不勝數的是CSS兼容的其他屬性,如如下:

<SPAN style="background-color: yellow;">hello</SPAN> 

當然,還有其他數不勝數使用HTML更改顏色的方法,如果需要,可隨時在網上搜索。

現在,您可以使用dotnet中的.Replace()函數來執行此操作(替換搜索到的文本),這非常簡單。因此,您可以使用.DocumentText將整個文檔作爲字符串獲取,並且一旦所有的發生被替換(使用.Replace()),您可以將其設置回.DocumentText(因此,您使用.DocumentText獲取原始文檔字符串,並用替換的字符串設置.DocumentText)。當然,你可能不希望這樣做實際的HTML裏面的物品,這樣你就可以通過網頁上的所有元素通過在像下的所有元素做一個For Each循環只是循環:

For Each someElement as HTMLElement in WebBrowser1.Document.All 

並且每個元素都會有一個.InnerText/.InnerHTML和.OuterText/.OuterHTML,您可以獲取(讀取)和設置(用替換的文本覆蓋)。

當然,爲了您的需要,您可能只想替換並覆蓋.InnerText和/或.OuterText。

如果您需要更多幫助,請告訴我。無論哪種情況,我都想知道它是如何解決你的問題的,或者如果我們有更多的人能夠爲你的問題增加價值。乾杯。