问题标签 [mshtml]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
7465 浏览

c# - C#:将 CSS 注入 MSHTML 实例的最佳方法?

我正在尝试将一些伴随一些其他 HTML 的 CSS 注入到 C# 托管的 WebBrowser 控件中。我正在尝试通过底层的 MSHTML(DomDocument 属性)控件来执行此操作,因为此代码用作完整 IE8 BHO 的各种原型。

问题是,虽然我可以注入 HTML(通过 mydomdocument.body.insertAdjacentHTML)和 Javascript(通过 mydomdocument.parentWindow.execScript),但它完全拒绝了我的 CSS 代码。

如果我将包含要插入的 HTML 的字符串与注入后的目标页面源进行比较,则 MSHTML 的源将包含<style>元素及其基础源之外的所有内容。

CSS 通过了 CSS 2.1 的 W3C 验证。它不会做任何太棘手的事情,除了一些背景图像属性将图像直接嵌入到 CSS 中(例如background-image: url("data:image/png;base64...),并且注释掉这些行不会改变结果。

更奇怪的是(我不确定这是否相关),上周我对此没有任何问题。这周我又回到了它,在切换了一些在实际注入之前处理要注入的 HTML 的代码之后,它不再起作用了。自然地,我认为我的其中一个更改可能是问题所在,但是在注释掉所有这些逻辑并将其输入一个直字符串之后,HTML 仍然显示为未格式化。

目前我正在注入<body>标签,虽然我已经尝试注入<head>并且遇到了类似的结果。

在此先感谢您的帮助!

汤姆

0 投票
2 回答
3823 浏览

c++ - IHTMLDocument2::write() 的问题

我正在尝试从 html 缓冲区创建一个 mshtml 文档对象。但是当执行以下代码时,它正在调用 Internet Explorer 窗口。如何防止它调用 IE。

0 投票
2 回答
3081 浏览

c# - 如何使用 mshtml 将复选框设置为“已选中”?

我可以用 mshtml 做大部分我需要做的事情,但我有点不知道如何将复选框输入元素设置为“已选中”。情况是这样的...

提前感谢您的帮助!

格雷格

0 投票
2 回答
1285 浏览

c++ - 如何捕获从新的 Popup IE 窗口触发的事件

问候!

情况:

我的 ActiveX DLL 包含一个定制的网络浏览器。网络浏览器显示网页。当用户单击显示页面中的链接时,会弹出一个新的 IE 窗口并导航到单击的链接 URL。

问题:

如何捕获从新弹出 IE 窗口触发的DocumenComplete和 NavigateComplete 事件?

我已经尝试过的:

我试图捕获从自定义浏览器(不是新的 IE 窗口)触发的 *NewWindow2(IDispatch **ppDisp, VARIANT_BOOL Cancel) 事件,并获得指向新 IE 窗口的指针 ppDisp。我尝试将此指针用作事件源来建议或连接到事件处理程序 (IDispatch::Invoke) 以进行事件捕获。但是它不起作用。可能是因为新的 IE 窗口中的文档还没有加载。我不知道。

你能给我一个建议我应该怎么做吗?

谢谢!

0 投票
3 回答
3235 浏览

asp.net - 如何在没有安装 Visual Studio 的机器上使用 MSHTML?

我在我的 ASP.NET-MVC 应用程序中使用 mshtml 来解析 HTML。在我安装了 VS2008 Professional 的开发机器上运行良好。在我安装了 VS Express 2008/WebDev 的登台机器上运行良好。但是当尝试在没有 Visual Studio 版本的生产服务器上加载 COM 对象时,它会引发 FileNotFoundException。

'Microsoft.mshtml, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 或其依赖项之一。该系统找不到指定的文件。

我不想在生产机器上安装 Visual Studio。我读过一个建议,运行 C:\Program files\Common Files\Merge modules\vs_piaredist.exe 解决了这个问题,但这个目录在我的生产机器上不存在。如何在生产机器上使用 mshtml?

0 投票
0 回答
553 浏览

exception - IHTMLElementCollection 有时会生成 UnauthorizedAccessException

我们在 ASP.NET 2.0 应用程序中使用 IHTMLElementCollection。
有时——并非总是如此——它会给我们一个 UnauthorizedAccessException。我认为它只发生在我们的服务器上,而不是本地。

我尝试在 searchdotnet.com 中搜索,只找到 2 个结果,但在这两个结果中,使用 IHTMLElementCollection 是该异常的解决方案,而不是原因...

什么可以使 IHTMLElementCollection 生成该异常?

0 投票
1 回答
3585 浏览

c++ - 如何从 IE DOM 中获取最新的 IHTMLDocument2 对象

目前,我使用 MSAA 从 IE HWND 获取 IHTMLDocument2 对象。但是,对于一些复杂的Web应用程序,这个IHTMLDocument2对象可能包含多个IHTMLDocument2对象,其中一些不属于当前显示页面,而是属于前一页面。

在我看来,IE 有时不会刷新它的 DOM 对象,而是不断地在它的 DOM 中添加更多的 IHTMLDocument2 对象。我的问题是如何从 DOM 对象中获取当前显示的 IHTMLDocument2 对象。

提前致谢

更新

嗨,雷米,

感谢您的回答。

是的,你是对的,我确实使用框架来访问其他 IHTMLDocument2 对象。我的理解是,我从 HWND 获得的 IHTMLDocument2 对象是其 DOM 中的顶级对象。IE 有时也会将先前的 IHTMLDocument2 对象放入其中一个框架中。

这是我的代码的一部分。

0 投票
1 回答
28602 浏览

c# - C# 中的 mshtml.HTMLDocumentClass

在 C# 中,我设法从 InternetExplorer 对象(导航到某个 URL)中获取整个 HTMLDocumentClass。

但是,在 Visual Studio 2008 的调试模式下,这个特定 URL 的 HTMLDocumentClass 的内容是 MASSIVE,包括像 activeElement、alinkColor、all、applet、charset、childNodes 等等属性。

该页面中有一个按钮,我希望将其更改为“已单击”。但我不知道如何找到该按钮的名称/ID/标签。有一个简单的教程使用如下语句:

但是我的 URL 的结构比这复杂 100 倍。

假设 URL 是 yahoo.com,我想“单击”Web Search 按钮。

有什么系统的方法来解决这个问题吗?

0 投票
1 回答
5033 浏览

c# - 在 C# 中访问 DOM 元素

我正在使用 mshtml 命名空间来访问由 COM 浏览器对象返回的 DOM 元素。

我的代码大致如下

现在,到目前为止,myDiv 是一个 DivElement。

但是,网页本身在“divID”下包含更多的 DIV。也就是说,有很多层嵌套的 DIV。

但是 myDIV 对象的类型是 mshtml.HTMLDivElement,它无法为我提供检索更多 DIVS 作为其子项的功能。

在这种情况下我能做什么?假设我需要以嵌套方式检索更多 DIV?

0 投票
1 回答
140 浏览

html - DOM 的 ID 是否会因浏览器而异?

在 C# 中,我使用 mshtml.HTMLDocument 从页面中检索各种元素。

例如:

button = (mshtml.HTMLButtonElement)theDoc.getElementById("ID1");

现在,如果我运行的是 IE6、IE7、IE8,“ID1”会根据浏览器版本而改变吗?