public static LightWeightHTMLDocument FromStream(Stream stream, string url, string name) { if (!stream.CanSeek) { string filePath = TempFileManager.Instance.CreateTempFile(); using (FileStream file = new FileStream(filePath, FileMode.Open)) StreamHelper.Transfer(stream, file); return(LightWeightHTMLDocument.FromFile(filePath, url, name)); } else { Encoding currentEncoding = Encoding.Default; LightWeightHTMLDocument lwDoc = null; using (StreamReader reader = new StreamReader(stream, currentEncoding)) { lwDoc = LightWeightHTMLDocument.FromString(reader.ReadToEnd(), url, name, true); // If there is no metadata that disagrees with our encoding, just return the DOM read with default decoding LightWeightHTMLMetaData metaData = new LightWeightHTMLMetaData(lwDoc); if (metaData != null && metaData.Charset != null) { try { // The decoding is different than the encoding used to read this document, reread it with correct encoding Encoding encoding = Encoding.GetEncoding(metaData.Charset); if (encoding != currentEncoding) { reader.DiscardBufferedData(); stream.Seek(0, SeekOrigin.Begin); using (StreamReader reader2 = new StreamReader(stream, encoding)) { lwDoc = LightWeightHTMLDocument.FromString(reader2.ReadToEnd(), url, name, true); } } } catch (NotSupportedException) { // The encoding isn't supported on this system } catch (ArgumentException) { // The encoding isn't an encoding that the OS even knows about (its probably // not well formatted or misspelled or something) } } } return(lwDoc); } }
public static LightWeightHTMLDocument[] GetLightWeightDocumentForFrames(IHTMLDocument2 htmlDocument) { ArrayList frameLightWeightDocuments = new ArrayList(); // Get the IOleContainer for the for the html document (this requires that // the document is the root document in the browser) IOleContainer oleContainer = (IOleContainer)htmlDocument; IEnumUnknown enumUnknown; // Enumerate the controls in the browser oleContainer.EnumObjects(OLECONTF.EMBEDDINGS, out enumUnknown); // Iterate through the controls object unknown; for (int i = 0; HRESULT.S_OK == enumUnknown.Next(1, out unknown, IntPtr.Zero); i++) { // Only subframes should cast to IWebBrowser2 IWebBrowser2 webBrowser = unknown as IWebBrowser2; // Since it is a subframe, we can also get the base frame implementation for it IHTMLFrameBase frameBase = unknown as IHTMLFrameBase; // It's a frame, add this to the list! if (webBrowser != null) { try { IHTMLDocument2 frameDocument = webBrowser.Document as IHTMLDocument2; if (frameDocument != null) { LightWeightHTMLDocument document = LightWeightHTMLDocument.FromIHTMLDocument2(frameDocument, frameDocument.url, frameBase.name); if (document != null) { frameLightWeightDocuments.Add(document); } } } catch (InvalidCastException) { string html = "<HTML></HTML>"; LightWeightHTMLDocument document = LightWeightHTMLDocument.FromString(html, webBrowser.LocationURL, webBrowser.LocationURL, true); if (document != null) { frameLightWeightDocuments.Add(document); } } } } return((LightWeightHTMLDocument[])frameLightWeightDocuments.ToArray(typeof(LightWeightHTMLDocument))); }
public static LightWeightHTMLDocument FromString(string html, string baseUrl) { return(LightWeightHTMLDocument.FromString(html, baseUrl, true)); }