我在應用程序中嵌入了WebBrowser控件,並顯示從服務器接收到的內容。具體來說:控件綁定到一個字符串,該字符串包含來自其他調用的錯誤消息,有時是HTML。禁用WebBrowser控件中的活動內容
不知道是否存在安全風險,如果活動內容,例如JavaScript將作爲錯誤消息的一部分發送。有沒有辦法指示WebBrowser控件禁用所有活動內容?
我在應用程序中嵌入了WebBrowser控件,並顯示從服務器接收到的內容。具體來說:控件綁定到一個字符串,該字符串包含來自其他調用的錯誤消息,有時是HTML。禁用WebBrowser控件中的活動內容
不知道是否存在安全風險,如果活動內容,例如JavaScript將作爲錯誤消息的一部分發送。有沒有辦法指示WebBrowser控件禁用所有活動內容?
有幾種方法可以做到:
第一種方法是從你的字符串中刪除的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。
謝謝櫻花。我可能需要遵循這種方法。然而,我的想法是指示WebBrowser控件禁用活動內容,就像我可以告訴它我的瀏覽器一樣。 –
是的,如果我們能做到的話,那將是最好的。但[有些人](http://stackoverflow.com/a/10623739/1560697)說這是不可能的。 – Sakura
良好的聯繫。沒有找到該信息。 –
你能解釋清楚嗎?如果你想從服務器上禁用javascript代碼/ html,你可以輕鬆地做到。如果您信任服務器,則更容易處理髮送給您的服務器。 – Sakura
恰恰相反。我不相信服務器。我想在WebBrowser視圖中顯示內容,但是所有活動內容均已停用。 –
這是否意味着您要完全禁用WebBrowser JavaScript? – Sakura