Tag: mshtml

检测WebBrowser控件上的滚动

我有以下代码,奇怪的是,它工作了几秒钟然后停止工作(我的事件处理程序方法停止被调用): public partial class Form1 : Form { private void Form1_Load(object sender, EventArgs e) { webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted); webBrowser1.Navigate(“google.com”); } private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { if (!webBrowser1.IsBusy && webBrowser1.Url == e.Url && webBrowser1.ReadyState == WebBrowserReadyState.Complete) { HTMLWindowEvents_Event windowEvents = webBrowser1.Document.Window.DomWindow as HTMLWindowEvents_Event; windowEvents.onscroll += new HTMLWindowEvents_onscrollEventHandler(windowEvents_onscroll); } } private void windowEvents_onscroll() { […]

如何打开Internet Explorer窗口,在URL上导航并使用c#和mshtml库获取她的文档(HTMLDocument或InternetExplorer)

如何打开Internet Explorer窗口或选项卡,导航它并使用c#和mshtml库获取她的文档(HTMLDocument或InternetExplorer)。 IE对象的类型应该是HTMLDocument或InternetExplorer。

HTML遍历非常缓慢

我遇到过简单地使用C#迭代MSHTML元素非常慢。 这是通过document.all集合迭代三次的小例子。 我们有空白的WPF应用程序和名为Browser的WebBrowser控件: public partial class MainWindow { public MainWindow() { InitializeComponent(); Browser.LoadCompleted += DocumentLoaded; Browser.Navigate(“http://google.com”); } private IHTMLElementCollection _items; private void DocumentLoaded(object sender, NavigationEventArgs e) { var dc = (HTMLDocument)Browser.Document; _items = dc.all; Test(); Test(); Test(); } private void Test() { var sw = new Stopwatch(); sw.Start(); int i; for (i = 0; i […]

在C#/ .NET 4.0中新的NoPIA和Type Equivalencefunction是否意味着不再需要Microsoft.mshtml.dll

我正在维护一个基于WPF的应用程序,它包含一个基于WinForms的WebBrowser控件,该控件基于IE Web浏览器控件。 当我们部署时,我们还必须提供Microsoft.mshtml.dll并为ClickOnce发布过程做一些自定义配置,以便让事情发挥作用。 我很好奇,使用C#4.0中新的NoPIA和Type Equivalencefunction以及动态类型function,我们可以期望如果我们升级它,我们可以删除对Microsoft.mshtml.dll程序集的依赖吗? 如果是这样,这不仅会减少我们部署的规模,还会简化我们的发布过程。 我的理解是,我们应该能够将通常自动生成的类型嵌入到COM类型的额外程序集中,例如Visual Studio的MapPoint控件。 我不知道这是否也适用于Microsoft.mshtml.dll ,甚至在最简单的情况下它是如何完成的。 如果有人可以解释这些新function对依赖COM互操作的项目的实际影响,特别是Microsoft.mshtml.dll程序集,那将对我有很大帮助。

在WebBrowser中的另一个域中获取iFrame中的文本的任何解决方法?

您可能会首先认为由于XSS限制而无法实现。 但我试图从托管WebBrowser的应用程序访问此内容,而不是从站点中的javascript代码访问。 我理解是不可能的,并且不应该通过非hacky手段从javascript访问此内容,因为这将是一个很大的安全问题。 但是,从托管WebBrowser的应用程序中获得此限制是没有意义的。 如果我想加强我的应用程序用户的Facebook信息,我可以做一个Navigate(“facebook.com”)并做任何我想要的东西。 这是一个托管WebBrowser的应用程序,而不是网页。 此外,如果您使用Google Chrome浏览器访问包含其源位于其他域中的iFrame的任何网页,并右键单击其内容并单击“检查元素”,它将显示该内容。 更简单的是,如果您导航到包含其他域中的iFrame的任何网页,您将看到其内容。 如果您可以在WebBrowser上看到它,那么您应该能够以编程方式访问它,因为它必须位于内存中的某个位置。 有没有办法,不是来自DOM对象,因为它们似乎基于与javascript相同的引擎,因此受到XSS限制的限制,但是从一些更低级别的对象(如MSHTML或SHDocVw )来访问此文本?

更改文档属性时,WPF WebBrowser控件不会进入设计模式

我有一个令人沮丧的问题。 这是我正在做的简化版本: c#中的UserControl包含工具栏和嵌入的WebBrowser对象。 工具栏包含一个“编辑”按钮,单击该按钮可在设计模式下设置Web浏览器控件。 另一个按钮“取消”关闭设计模式。 伪代码(非常简化): public void SetDesignMode(bool dm) { IHTMLDocument2 doc = webBrowser.Document as IHTMLDocument2; if (dm) doc.designMode = “On”; else doc.designMode = “Off”; _designMode = dm; ReloadDocument(); // setting designmode clears the document element, so it must be reloaded } public void OnLoadCompleted() { IHTMLDocument2 doc = webBrowser.Document as IHTMLDocument2; if (!_documentLoaded) […]

MSHTML HTMLHeadElementClass COM错误

我目前正在使用MS HTML将JavaScript代码插入到网站中。 我引用了Microsoft HTML Object Library并输入了这段代码。 IHTMLDocument2 doc = BrowserHost.Document as HTMLDocumentClass; IHTMLElement head = (IHTMLElement) ((IHTMLElementCollection)doc.all.tags(“head”)).item(null, 0); IHTMLScriptElement scriptObject = (IHTMLScriptElement)doc.createElement(“script”); scriptObject.type = @”text/javascript”; scriptObject.text = TTS.TTSWebFactory.GetJavascript(); ((HTMLHeadElementClass)head).appendChild((IHTMLDOMNode)scriptObject); 我在脚本的最后一行收到错误,这是消息。 Unable to cast COM object of type ‘System._ComObject’ to class type ‘mshtml.HTMLHeadElementClass’. COM components that enter the CLR and do not support IProvideClassInfo or that […]

.net文件用mshtml写

我使用mshtml进行html解析。 (版本7.0.3300.0,C:\ Program Files \ Microsoft.NET \ Primary Interop Assemblies \ Microsoft.mshtml.dll)。 HTMLDocumentClass有一个write方法,所以我使用它,但它引发了与ErrorCode的ComException:-2147352571和消息:类型不匹配。 它是什么原因? 如果不使用HTMLDocumentClass的write方法,他们为什么定义? HTMLDocumentClass getHTMLDocument(string html) { HTMLDocumentClass doc = new HTMLDocumentClass(); doc.write(new object[] { html }); // raises exception doc.close(); return doc; } HTMLDocumentClass getHTMLDocument2(string html) { HTMLDocumentClass doc = new HTMLDocumentClass(); IHTMLDocument2 doc2 = (IHTMLDocument2)doc; doc2.write(new object[] { html }); doc2.close(); […]

如何在IE9中使用MSHTML的addEventListener添加事件监听器?

addEventListener的MSDN文档说它接受IDispatch *对象forms的回调函数。 从C#(我正在使用COM互操作),Visual Studio将参数类型显示为object 。 我找了一个IEventListener接口或类似的东西,但没有找到一个。 我应该传递什么?

C#:将CSS注入MSHTML实例的最佳方法是什么?

我正在尝试将一些其他HTML附带的CSS注入到C#托管的WebBrowser控件中。 我试图通过底层的MSHTML(DomDocument属性)控件来执行此操作,因为此代码用作完整IE8 BHO的各​​种原型。 问题是,虽然我可以注入HTML(通过mydomdocument.body.insertAdjacentHTML)和Javascript(通过mydomdocument.parentWindow.execScript),但它完全拒绝我的CSS代码。 如果我在注入后将包含我要插入的HTML的字符串与目标页面源进行比较,那么MSHTML的源代码将包含除 元素及其基础源之外的所有内容。 CSS通过了CSS 2.1的W3Cvalidation。 它没有做任何太棘手的事情,除了一些背景图像属性将图像直接嵌入到CSS中(例如background-image: url(“data:image/png;base64 …)”,并注释掉这些行不会改变结果。 更奇怪的是(而且我不确定这是否相关),是我上周没有遇到任何问题。 本周我又回到了它,在切换了一些在实际注入之前处理要注入的HTML的代码之后,它不再起作用了。 当然,我认为我的某个更改可能会出现问题,但在对所有逻辑进行评论并将其直接输入后,HTML仍然显示为未格式化。 目前我正在注入标签,虽然我试图注入并且遇到了类似的结果。 在此先感谢您的帮助! 汤姆