using Gestor.Application.Properties; using HtmlAgilityPack; using mshtml; using System; using System.CodeDom.Compiler; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Net; using System.Reflection; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Interop; using System.Windows.Markup; using System.Windows.Navigation; using System.Windows.Threading; namespace Gestor.Application.Componentes { public class WebBrowser : UserControl, IComponentConnector { public HTMLDocument HtmlDocument; public System.Windows.Controls.WebBrowser Browser; public readonly static DependencyProperty IsReadOnlyProperty; internal Grid GridWebBrowser; private bool _contentLoaded; public bool IsReadOnly { get { return (bool)base.GetValue(Gestor.Application.Componentes.WebBrowser.IsReadOnlyProperty); } set { base.SetValue(Gestor.Application.Componentes.WebBrowser.IsReadOnlyProperty, value); } } static WebBrowser() { Gestor.Application.Componentes.WebBrowser.IsReadOnlyProperty = DependencyProperty.Register("IsReadOnly", typeof(bool), typeof(Gestor.Application.Componentes.WebBrowser), new PropertyMetadata(false)); } public WebBrowser() { this.InitializeComponent(); System.Windows.Threading.Dispatcher dispatcher = base.Dispatcher; if (dispatcher == null) { return; } dispatcher.BeginInvoke(DispatcherPriority.Render, new Action(this.ContentLoad)); } private void Browser_PreviewKeyDown(object sender, KeyEventArgs e) { if (this.IsReadOnly) { e.Handled = true; } } private void Completed(object sender, NavigationEventArgs e) { this.HtmlDocument = this.Browser.Document as HTMLDocument; if (this.HtmlDocument == null) { return; } this.HtmlDocument.designMode = "On"; } private void ContentLoad() { base.PreviewKeyDown += new KeyEventHandler(this.Browser_PreviewKeyDown); } private static void EncodeNode(HtmlNode node) { if (node.get_HasChildNodes()) { foreach (HtmlNode childNode in node.get_ChildNodes()) { if (childNode.get_NodeType() != 3) { Gestor.Application.Componentes.WebBrowser.EncodeNode(childNode); } else { childNode.set_InnerHtml(WebUtility.HtmlEncode(childNode.get_InnerHtml())); } } } else if (node.get_NodeType() == 3) { node.set_InnerHtml(WebUtility.HtmlEncode(node.get_InnerHtml())); } } private void HideScriptErrors() { FieldInfo field = typeof(Gestor.Application.Componentes.WebBrowser).GetField("_axIWebBrowser2", BindingFlags.Instance | BindingFlags.NonPublic); if (field == null) { return; } object value = field.GetValue(this.Browser); if (value != null) { value.GetType().InvokeMember("Silent", BindingFlags.SetProperty, null, value, new object[] { true }); } } public static string HtmlEncode(string html) { if (html == null) { return null; } HtmlAgilityPack.HtmlDocument htmlDocument = new HtmlAgilityPack.HtmlDocument(); htmlDocument.LoadHtml(html); htmlDocument.OptionWriteEmptyNodes = true; Gestor.Application.Componentes.WebBrowser.EncodeNode(htmlDocument.get_DocumentNode()); return htmlDocument.get_DocumentNode().get_InnerHtml(); } [DebuggerNonUserCode] [GeneratedCode("PresentationBuildTasks", "4.0.0.0")] public void InitializeComponent() { if (this._contentLoaded) { return; } this._contentLoaded = true; System.Windows.Application.LoadComponent(this, new Uri("/Gestor.Application;component/componentes/webbrowser.xaml", UriKind.Relative)); } public void InstanciateNew(string htmlData = null) { if (this.Browser != null) { this.Browser.LoadCompleted -= new LoadCompletedEventHandler(this.Completed); this.Browser.Dispose(); this.GridWebBrowser.Children.Remove(this.Browser); } HTMLDocument htmlDocument = this.HtmlDocument; if (htmlDocument != null) { htmlDocument.clear(); } else { } this.Browser = new System.Windows.Controls.WebBrowser() { IsEnabled = true }; this.Browser.LoadCompleted += new LoadCompletedEventHandler(this.Completed); this.GridWebBrowser.Children.Add(this.Browser); this.HideScriptErrors(); htmlData = Gestor.Application.Componentes.WebBrowser.HtmlEncode(htmlData); this.Browser.NavigateToString((string.IsNullOrEmpty(htmlData) ? Gestor.Application.Properties.Resources.New : htmlData)); this.HtmlDocument = this.Browser.Document as HTMLDocument; if (this.HtmlDocument == null) { return; } this.HtmlDocument.charset = "ISO-8859-1"; this.HtmlDocument.designMode = "On"; } public void ReadOnly(bool isReadOnly) { this.IsReadOnly = isReadOnly; } [DebuggerNonUserCode] [EditorBrowsable(EditorBrowsableState.Never)] [GeneratedCode("PresentationBuildTasks", "4.0.0.0")] void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) { if (connectionId != 1) { this._contentLoaded = true; return; } this.GridWebBrowser = (Grid)target; } } }