2016-03-03 43 views
1

我在應用程序中嵌入了WebBrowser控件,並顯示從服務器接收到的內容。具體來說:控件綁定到一個字符串,該字符串包含來自其他調用的錯誤消息,有時是HTML。禁用WebBrowser控件中的活動內容

不知道是否存在安全風險,如果活動內容,例如JavaScript將作爲錯誤消息的一部分發送。有沒有辦法指示WebBrowser控件禁用所有活動內容?

+0

你能解釋清楚嗎?如果你想從服務器上禁用javascript代碼/ html,你可以輕鬆地做到。如果您信任服務器,則更容易處理髮送給您的服務器。 – Sakura

+0

恰恰相反。我不相信服務器。我想在WebBrowser視圖中顯示內容,但是所有活動內容均已停用。 –

+0

這是否意味着您要完全禁用WebBrowser JavaScript? – Sakura

回答

1

有幾種方法可以做到:

第一種方法是從你的字符串中刪除的javascript之前將它傳遞給瀏覽器,從Elian Ebbing's answer

快速「N」髒的方法是像一個正則表達式這樣的:

var regex = new Regex(
    "(\\<script(.+?)\\</script\\>)|(\\<style(.+?)\\</style\\>)", 
    RegexOptions.Singleline | RegexOptions.IgnoreCase 
); 

string ouput = regex.Replace(input, ""); 

更好*(但可能更慢)的選擇是使用 HtmlAgilityPack

HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(htmlInput); 
var nodes = doc.DocumentNode.SelectNodes("//script|//style"); 
foreach (var node in nodes)  node.ParentNode.RemoveChild(node); 
string htmlOutput = doc.DocumentNode.OuterHtml; 

*)有關更好的原因的討論,請參見this thread

這樣看起來更好,更容易。

第二種方式是使用WinForms webbrowser控件,它允許您控制較低級別的瀏覽器,但這涉及到一些調用到WinAPI。

有關更多信息,請參閱this link

+0

謝謝櫻花。我可能需要遵循這種方法。然而,我的想法是指示WebBrowser控件禁用活動內容,就像我可以告訴它我的瀏覽器一樣。 –

+0

是的,如果我們能做到的話,那將是最好的。但[有些人](http://stackoverflow.com/a/10623739/1560697)說這是不可能的。 – Sakura

+1

良好的聯繫。沒有找到該信息。 –