问题标签 [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 投票
3 回答
2835 浏览

c# - IHTMLTxtRange.pasteHTML 不会替换旧的 HTML

我正在使用 Microsoft 的 mshtml 编写一个简单的 HTML WYSIWYG 编辑器。其中一项功能应该是为所选文本选择标题类型(例如 h1、h2、h3)。第一个赋值是没有问题的,下面的代码:

当我尝试更改标题时,尽管 MSDN 提到了 pasteHTML,但旧的并没有被替换:

将 HTML 文本粘贴到给定的文本范围内,替换该范围内的任何先前文本和 HTML 元素。

这意味着如果我的 HTML 是

在第一次分配之后,它得到

在第二个之后。

我究竟做错了什么?我错过了什么吗?

0 投票
5 回答
2269 浏览

c# - 如何在鼠标单击期间更改 MSHTML 中插入符号的位置?

我在应用程序中嵌入了一个基于 MSHTML 的控件,并且ContentEditable模式用于编辑其中的文档。HTML 文档的正文最初包含以下几行:

插入符号位于文档的开头,即第一个 DIV 元素内。现在,当用户在控件内最后一行下方的位置单击鼠标时,插入符号将移动到第二个 DIV 元素中,因为它是最接近用户单击点的元素。

我想在鼠标单击时将指针移动到第一个 DIV 的末尾。现在我有代码来计算插入符号的预期位置为IMarkupPointerIDisplayPointer。我需要知道的是在哪里拦截 MSHTML 事件管道以执行实际的插入符号移动。

我编写了实现IHTMLEditDesigner插入符号并将其移动IHTMLCaret.MoveCaretToPointer到预期位置的代码。问题是,无论我在哪里截获事件(PreHandleEvent、PostHandleEvent 或 PostEditorEventNotify),插入符号位置最终都会在单击时恢复为默认位置(但如果我按住鼠标左键一会儿或者如果我用鼠标右键单击)。

0 投票
2 回答
1249 浏览

c# - c# webbrowser 控件显示“特殊文件夹”内容:为什么 Document 和 DocumentDom 总是为空?

在 C# WinForms、.NET Framework 3.5 项目中,表单上有一个 WebBrower 控件:

... 项目引用设置为 MSHTMLdll 和 WinForm 代码:​​“使用 mshtml;” ...

  1. 您可以轻松地将“特殊文件夹”(例如“收藏夹”文件夹)加载到浏览器中。

  2. 加载“特殊文件夹”后:WebBrowser 中显示的内容本质上是一种“资源管理器”视图:您可以选择典型的“资源管理器”视图样式的“详细信息”等。在详细信息视图中,您有一个行列矩阵,具有典型的“Explorer”样式列头等。

通常,我会通过将 Document 或 Document 的 DomDocument 转换为 mshtml.dll 公开的 IHTMLDocument2 接口来“获取”WebBrowser 的 DOM:

IHTMLDocument2 HTMLDocument = (IHTMLDocument2)webBrowser1.Document;

//也试过这个

// IHTMLDocument2 HTMLDocument = (IHTMLDocument2)webBrowser1.Document.DomDocument;

//也试过这个

// HTMLDocumentClass HTMLDocument = webBrowser1.Document.DomDocument as HTMLDocumentClass;

但在这种情况下,查看“特殊文件夹”内容时,我总是将 Document 设为 null。

有趣的是,您可以在查看特殊文件夹(如收藏夹)时创建一个新文件夹并执行其他“文件操作”:我想知道我是否因为在 IE8 上关闭了保护模式而“摆脱了这个”?

在查看 WebBrowser 控件中的特殊文件夹时,了解有关如何访问 DOM 的任何想法。

谢谢 !账单

0 投票
2 回答
2525 浏览

c# - C# 的 URL Moniker 示例 (IMoniker)

我正在尝试为 MSHTML 实现一个 URL Moniker,它将用于将图像从存储(在应用程序中)提供给 HTML 编辑控件。我知道要做到这一点,我必须实现 IMoniker 接口。

我在任何地方都没有找到任何像样的文档或示例代码。(关于这个主题的所有 MSDN 文档似乎都暗示了 C++/COM 编程和对 OLE 的非常深刻的理解,我不能说我有)。

我将如何在 C# 中实现 URL Moniker 和 IMoniker 接口?

0 投票
2 回答
6502 浏览

c# - 如何使用 C# 获取 HTML 元素坐标?

我打算开发网络爬虫,它会从网页中提取 html 元素的坐标。我发现可以通过使用“mshtml”程序集来获取 html 元素坐标。现在我想知道是否有可能以及如何从网页中仅获取必要的信息(html、css),然后通过使用适当的 mshtml 类获取所有 html 元素的正确坐标?

谢谢!

0 投票
3 回答
4590 浏览

html - 如何使用 MSHTML 解析 onclick javascript 事件参数?

我需要在以下标记中定义的 onlick 事件中提取 javascript 调用:

这就是我想从 onclick 中提取的文本字符串:'javascript:start("a", "b", "code");'

我是使用 MSHTML 的新手,这是我迄今为止尝试过的,但我一无所获。也许有更好的方法来做到这一点?

0 投票
2 回答
1446 浏览

mfc - MSHTML MFC 教程

我知道这已经被问过两次了,但都没有适当的答复并且已经过时了,所以如果有人在这些天发现了什么,我再问一次!

任何人都知道任何关于 MSHTML 的好教程或一些可以阅读以了解如何在 MSHTML - MFC 中完成各种操作的开源项目?

谢谢

0 投票
2 回答
5595 浏览

c# - 更改文档属性时 WPF WebBrowser 控件不进入设计模式

我有一个令人沮丧的问题。这是我正在做的简化版本:

c# 中的 UserControl 包含一个工具栏和一个嵌入的 WebBrowser 对象。工具栏包含一个“编辑”按钮,单击该按钮可将 webbrowser 控件设置为设计模式。另一个按钮“取消”关闭设计模式。

伪代码(非常简化):

问题: 如果我单击显示的网页,然后单击“编辑”按钮,WebBrowser 控件将无法编辑。将鼠标悬停在图片/链接上时的鼠标指针显示 Web 浏览器导航鼠标指针,而不是编辑指针。如果我单击文本,插入符号将不会显示。

调试显示,在这种情况下,文档上的 designMode 属性实际上设置为“On”,但该控件的行为就像设置为“Off”一样。

如果我在单击“编辑”按钮之前没有单击网页,则一切正常

详细说明: 如果我在控件处于设计模式时单击“取消”按钮,如果文档已被单击,我会得到相应的(错误)行为。

只需单击“编辑”,然后单击“取消”,然后单击“编辑”等,而无需单击文档即可正常工作(鼠标悬停测试显示正确的鼠标指针,如果我可以根据设计模式获得链接导航或编辑单击显示文档中的链接)。

在更改 designMode 属性之前,我尝试了各种技术来确保另一个控件获得焦点,但这没有任何区别。我搜索了 MSDN 和一半的已知互联网,但没有发现任何提及此类问题的内容。像这样翻转 designMode 属性似乎很不寻常。

另一个信息:我通过使用用户控件实现的接收器向文档提供建议来设置文档事件。我怀疑这应该与问题有任何关系,但为了完整起见,我将其包含在此处。更新:禁用此功能不会改变有关问题的任何内容。

有人认识到这个问题吗?

更新: 我通过在 SetDesignMode() 中重新创建 Web 浏览器控件解决了这个问题。这是一个丑陋的解决方案,但它确实有效并且看起来确实不错。不过,我对有关此问题的任何反馈都非常感兴趣。我相信这是 MSHTML 中的一个错误。

0 投票
2 回答
1641 浏览

c# - 在 C# 中使用不同版本的 MSHTML

有什么方法可以强制 C# 应用程序使用特定版本的 MSHTML DLL?

我正在尝试编写一个使用不同版本的 IE 渲染引擎的应用程序,以帮助网页设计师测试他们的创作是否与 IE6、IE7 等向后兼容...

据我所知,SHDOCVW DLL“托管”或“运行”MSHTML DLL(http://msdn.microsoft.com/en-us/library/aa741313 (VS.85).aspx )。

通过将版本 6.0.2900.2877 SHDOCVW.DLL 拖到 Visual C# 2008 Express Edition 的工具箱上,我已经能够在应用程序表单上创建 Microsoft Web 浏览器(COM 组件版本 1.1),并在希望 COM 组件将使用 MSHTML 的 v6(与 v6 SHDOCVW DLL 位于同一文件夹中)......但是两个组件似乎都使用相同的(可能是系统?)版本的 MSHTML。

我已经在带有 IE6 的 XP SP2 和带有 IE7 的 XP SP3 中运行了该应用程序。

在带有 IE6 的 SP2 中,两个浏览器组件都报告$_SERVER['HTTP_USER_AGENT']为 MSIE 6.0,而在带有 IE7 的 SP3 中,两个浏览器组件都报告$_SERVER['HTTP_USER_AGENT']为 MSIE 7.0。

有谁知道是否可以强制使用特定版本的 MSHTML DLL?如果是这样,怎么办?

0 投票
1 回答
596 浏览

visual-c++ - 在 MSHTML 中获取当前用户选择(IHTMLTxtRangePtr)

如何在 HTML 文档中获取当前用户选择或当前光标位置?我在 MFC 中使用 MSHTML 接口。