问题标签 [shdocvw.internetexplorer]
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.
c# - 引发 System.Runtime.InteropService.COMException 并关闭 Internet Explorer
我正在使用SHDocVw.InternetExplorer
打开和控制内部网站上的自动化浏览器窗口。该软件通常按需要运行,但浏览器偶尔会关闭。我已经追踪了导致它发生的代码行,但我无法想出解决问题的方法。
我的原始代码如下所示:
但是,只要window.Document
调用导致COMException
浏览器就会关闭。我尝试创建一个 isReady 布尔值,当我尝试离开当前页面时设置为 false,并在NavigateComplete2
触发事件时设置为 true,但如果浏览器询问“您确定要离开此页面,它不会触发“这意味着我无法与这些弹出窗口进行交互。
所以我尝试将代码更改为:
虽然我遇到的崩溃次数较少,但当通话COMException
发生时,它仍会偶尔关闭浏览器。window.Busy
由于NavigateComplete2
导航被浏览器中断时不会触发并且InternetExplorer.Busy
还可能导致浏览器关闭我对如何解决没有想法。
编辑:我现在也试过了:window.ReadyState == tagREADYSTATE.READYSTATE_COMPLETE
但它会抛出同样COMException
的问题window.ReadyState
并使窗户崩溃。
c# - 读取 mshtml.HTMLDocument.Script 属性时出现 InvalidCastException
尝试读取 mshtml.HTMLDocument 属性会导致以下异常:
mscorlib.dll 中出现“System.InvalidCastException”类型的未处理异常附加信息:指定的强制转换无效。发生了
这发生在“object script = doc.Script;”这一行上。
代码:
这是我正在使用的测试页面:
这是我的项目参考:
wpf - 如何使用 VB.NET 区分 SHDocVw.InternetExplorer 和 SHDocVw.WebBrowser_v1?
我有一个 WPF 应用程序,它具有循环浏览打开的 IE 网页(是的,我们仍在使用 IE)并从 HTML 中抓取数据的功能。有时,用户会收到一条错误消息,指出“未找到类型 WebBrowser_V1 上的公共成员‘名称’”,然后是“无法将‘System._ComObject’类型的 COM 对象转换为接口类型‘mshtml.HTMLDocument’......”我不是找到太多关于为什么 IE 窗口偶尔会被视为“WebBrowser_V1”而不是“Internet Explorer”的答案。目前,我们找到的唯一解决方案是关闭所有 IE 实例并重新启动应用程序,如果不起作用,则重新启动 PC。我一直无法在调试中复制错误。任何人都可以协助提供有关我如何解决此问题的见解吗?
c# - 无法将“System.__ComObject”类型的 COM 对象转换为接口类型“mshtml.HTMLDocument”
试图附加到IE浏览器..它工作了一段时间然后开始抛出这个错误......
此代码在 500 毫秒的计时器上触发...
有人可以告诉我如何解决吗?我做错了什么?|| 我该如何改进它...我的代码如下...
自我说明:为什么我需要更多细节?源代码比程序员在编写下一个百万美元的应用程序时想要给出的细节要多得多!
internet-explorer - 是否需要安装IE才能使用shdocvw.dll?
长期以来,我们一直在使用 shdocvw.dll 在我们的应用程序中显示网页。
如果未安装 Internet Explorer 并安装了 Edge,是否也应该使用 dll?
c# - SHDocVw 仅适用于 Win 10 x64 版本
我有以下用 C# WinForms 编写的代码:
在 x86 平台上运行时出现空引用错误。在 x64 上运行时,一切正常。我想问题出在 Interop.SHDocVw 上。
编辑:在 if 条件下, webBrowser1.Url 部分变为空。所以我试过这样:(它没有给我任何错误,但控制是空的)
如何解决此问题以使其在 x86 平台上也能正常工作?
谢谢
c# - 如何使被 JS addEventListener 捕获的 SHDocVw.InternetExplorer 触发事件?
以下问题:
- 我需要模拟一个 div 元素的双击。
- 我需要使用/处理 MS Internet Explorer 11。
- 我无法更改目标站点的源代码。
到目前为止我的解决方案:
- 我使用 C# 和 SHDocVw.InternetExplorer 和 mshtml
- 我可以触发“点击”事件,它们会出现在所有处理程序中
- 尝试模拟双击时:
-
- “ondoubleclick”事件被触发。
-
el.addEventListener('dblclick', handler);
不会被触发
为了降低实际问题站点的复杂性,我也创建了这个模拟问题的 HTML 代码:
我的 C# 代码是这样的:
和我的事件类(可能根本不需要):
运行代码时,我得到以下结果:
如您所见,点击事件都到达(onclick, click, onclick, click, ondblclick)
了,但addEventListener('dblclick', ...)
没有。应该(onclick, click, onclick, click, ondblclick, dblclick)
在最后。有什么想法可以做到这一点吗?
我的另一个解决方案是劫持鼠标并模拟“真正的”点击,但这对我来说太老套了。
c# - 使用 .NET/C# 和 SHDocVw.InternetExplorer 获取 HTML 显示区域(视口)偏移到 0/0 并缩放 IE 窗口
这不是HTML / JAVASCRIPT / CSS 问题!
我需要将 HTML 显示区域(又名视口)偏移到 IE 窗口的 0/0。
- 我的目标是 Microsoft Internet Explorer 11。
- 我正在使用带有 SHDocVw.InternetExplorer 库的 C# 来访问/控制 IE。
我真正想做的是触发双击事件
- 类似于 IHTMLElement.click(),只是一个 doubleClick()
- 多次调用 IHTMLElement.click() 不起作用
我试图在没有实际点击的情况下解决它:
所以现在我正在控制鼠标来触发某些事件,调用 [DllImport("user32.dll")] public static extern bool GetCursorPos(out PointInter lpPoint);
等来获取和设置鼠标光标并模拟对某些元素的双击。
对于鼠标导航,我已经考虑到了
- 操作系统的桌面缩放/比例设置
- IE 窗口 Left 和 Top 属性
- IHTMLElement(3).getClientBoundingRect的位置,即我要触发的元素的位置
当 IE 配置相同时,这一切都可以正常工作。我的假设:
- 相同的 HTML 视口偏移(相同的工具栏、菜单等)
- HTML 视口缩放 100%(无页面缩放)
但这两个因素是动态的,所以我必须以某种方式解释它们。
所以我需要的是:
- HTML 视口的垂直偏移(在两个屏幕截图中都是 106 像素)
- HTML 视口的水平偏移量(首先是 1,其次是 291)
- HTML 视口的缩放系数(在两个屏幕截图中均为 100%)
我曾尝试访问 ShDocVw.InternetExplorer 对象中的多个元素,但我要么有错误的接口转换,要么它没有自愿公开这些信息,因为我还没有找到它。
从对谷歌世界的深入研究中,我也一无所获,所以那里也没有(明显的)答案。
那么你们中的任何人都知道如何处理这个问题吗?一些晦涩的 COM/OLE 咒语和仪式可以引导鼠标光标前进?
编辑:
肮脏的解决方案:我可以先显示一些自制的 HTML/JS 页面,它检测我的模拟鼠标移动并将该信息转储到某个(不可见)div 中,然后在 C# 中读取该数据。
虽然这是一个解决方案,但如果用户在应用程序运行时更改缩放,它非常难看并且对于考虑可能在以后的运行时发生的布局/显示更改没有用处。
internet-explorer - shdocvw.dll (ActiveX) 是否支持弹出窗口以及如何支持?
我们正在使用 shdocvw.dll 在我们的应用程序中显示嵌入式浏览器。
shdocvw.dll 是否支持弹出窗口?如果是这样,如何启用它?
注册表配置为使用 IE11。