问题标签 [iwebbrowser2]
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.
javascript - Delphi - 无法在多线程应用程序中使用 IWebBrowser2 抑制 JavaScript 错误对话框
我在 Delphi XE2 中有一个应用程序(在 Win7 x64 上运行,安装了 MSIE 10.0.9200.16635),它创建了多个线程。每个线程创建 IWebBrowser2 接口,然后导航到网页,将其保存到磁盘,删除 IWebBrowser2 接口并终止线程。Web 浏览器的“静音”属性设置为 true。问题是,对于某些 URL,我在终止工作线程后会收到这些错误(例如,Web 浏览器应该不再存在: Screenshot1 Screenshot2
这些是JavaScript错误,第一个说“Function expected”,URL res://ieframe.dll/preview.js,另一个是“被调用者(服务器[不是服务器应用程序])不可用并消失;所有连接无效。调用未执行”。URL 相同,res://ieframe.dll/preview.js。我需要的只是抑制这些错误对话框,但我不能。IWebBrowser2 没有“ScriptErrorsSuppressed”属性,所以我不能这样。有时我会收到第一条消息,有时会收到另一条消息。我花了三天时间寻找答案,我很无奈。工作线程完成他们的工作,我没有内存泄漏 - 唯一的问题是这些错误对话框。我在 MSIE 的高级选项中禁用了调试和错误消息,但它没有帮助。我认为这里可能发生的是,在“正式”删除线程和所有对象之后,页面中的 javascript 仍在内存中的某处执行。然后,它发现浏览器对象不见了,这就是为什么我可能会收到第二条消息“被调用者(服务器......”。
这是我的代码:
我究竟做错了什么?有没有一种方法可以防止出现这些错误对话框?我正在考虑在下载的页面中注入我自己的 JavaScript - 例如我自己的 window.onerror 处理程序,它会抑制错误,但我不确定这是否是正确的方法,而且我对 JavaScript 也不好,尤其是这段代码注入东西。
任何帮助都非常感谢,谢谢!高手。
websocket - websocket 不能与 IWebBrowser2::Navigate 一起使用吗?
我正在编写小型 html websocket 应用程序。此 html 页面在 IE 窗口中运行良好,但如果尝试使用 IWebBrowser2::Navigate 打开同一页面,则会在标准 java 脚本错误消息框中引发错误“WebSocket 未定义”。以下是示例 javascript 代码:
请告诉我是否在导航方法中实现了websocket?
问候, 阿南德·乔贝
mfc - Web 链接在 WebBrowser 中加载并在 IE 中顺利显示链接时引发脚本错误
我有一个嵌入了 CWebBrowser 的 MFC 应用程序。
目前,我遇到了一个问题:
我的浏览器无法加载某些网页(缺少对象,关于 JS 内容的错误),并且在 IE(10) 中成功加载相同的网页时总是抛出脚本错误。
我也尝试用 Firefox 加载它,没关系。所以我想它不是由页面本身引起的......
据我所知,WebBrowser 有一个与 IE 相同的解析引擎。但是为什么会有不同的行为呢?
请帮我 。提前致谢 。
我的操作系统:Win7 x64 + IE10。
mfc - 使用 WebBrowser(VC) 发布数据失败
我有一个嵌入了 CWebBrowser 的 MFC 应用程序。我想在导航到指定的 web 时发布数据。通过对互联网的一些调查,我了解到 Navigate 方法的一个论点旨在通过它。但我试了几次,总是失败。调用导航方法后,数据流量中不携带发布数据(是的。我捕获数据并检查它)。我还检查了 before2Navigate 回调的 post 参数,它是空的..
这是我的片段。
请帮帮我。非常感谢。
mfc - 如何获得活动的 x 控件
我尝试在基于对话框的 mfc 上使用 IWebBrowser2 制作基本浏览器
我在对话框中插入一个活动的 x 控件,例如“microsoft web browser”
我尝试“AtlAxGetControl”获取 IWebBrowser2 指针
但是,我总是得到一个 e_fail,“res”总是失败
我做了“AtlAxWinInit();” 在初始化对话框上
谢谢你的阅读
请让我知道如何处理它
proxy - 如何使 IWebBrowser2->Navigate 使用代理服务器
我有一些代码 (VC++) 获取 IWebBrowser2 并使用它导航到某个 URL。我希望它通过代理服务器。我已经尝试了一些发布的解决方案,但似乎没有一个有效。
我得到的最接近的是使用 MSDN 代码,但它实际上改变了 Internet Explorer 的设置,因此更改是系统范围的——这对我的需求不切实际。
理想情况下,我希望代理设置位于每个 IWebBrowser2 实例上 - 所以我的代码中可以有 2 个 IWebBrowser2 对象,一个使用代理,另一个不使用。如果这不可能,那么每个进程都是可行的。
如果有人有这个工作并且可以发布一些代码,我将非常感激。
提前谢谢了。
c++ - How to get IWebBrowser2 of Internet Explorer running in "metro" mode?
I've got some C++ code, that uses ShellWindows to retrieve instances of IWebBrowser, but there is a problem, when IE is run in metro-mode - there are no instances in ShellWindows. Are there any methods to retrieve IWebBrowser in this situation or may be there are some similar APIs, etc? What I want is to retrieve the received document's content. May be there are some other ways to achieve this, when IE is in metro mode?
c++ - (IE BHO) 从 BeforeNavigate2 事件中获取 IWebBrowser2
我正在处理 IE BHO,在 BeforeNavigate2 事件中,如何获取指向 IWebBrowser2 的指针?这是我的代码:
并且 param[0] 的类型不是 VT_DISPATCH:
MSDN(BeforeNavigate2)说第一个参数是
指向表示窗口或框架的 WebBrowser 对象的 IDispatch 接口的指针。该接口可以查询IWebBrowser2接口。
我的代码有什么问题?
提前致谢。
c++ - 在 BeforeNavigate2 事件中枚举表单
我正在写一个 IE BHO,我想知道如何在事件回调中枚举表单。这是在 BeforeNavigate2 事件中枚举表单的代码,但长度始终为 0。
为什么总是输出0?
谢谢。
internet-explorer - IWebBrowser2 Ctrl + C 等快捷键支持
看来我没有小问题。
我将自己的窗口挂接到 IE 主窗口。我的窗口源自 WTL 的 CWindowImpl 并承载 IWebBrowers2 控件,该控件显示了一些内容。
IWebBrowser2 显示带有编辑框的 html <input type='text'/>
,我需要支持所有键,这是编辑和操作文本所必需的(Ctrl + C、Ctrl + V、Ctrl + X 等...+ Esc、Delete、向上和向下箭头)。
我还需要禁止一些快捷方式,例如 Ctrl + P、Ctrl + S,因为它们会调用特定于我不需要的网页的对话框。
似乎是常见问题,我需要为我的 IWebBrowser2 对象调用 TranslateAccelerator。
网上也有类似的问题——Tab key doesn't work in IWebbrowser2
解决方案——热键不起作用!!
这是我所需要的非常有趣的线程——在托管的 Web 浏览器控件中处理 Control-C
所以,首先我需要为我的 IWebBrowser2 对象调用 TranslateAccelerator。但我必须先从键盘获取消息。
那么,让我们看看它的外观。
我的挂钩窗口没有收到任何键盘输入消息。一个带有“Internet Explorer_Server”类的窗口接收所有这些(实际上,它是 IWebBrowser2 内的 IE 的一个 hwnd)。
所以我需要挂钩这个hwnd的window proc。
在 hooked wnd proc 中,我执行以下操作:
是的!有些事情成功了!Esc、Delete、向上和向下箭头键现在可以使用。
但不是所有的。快捷方式有问题。
- Ctrl + C,Ctrl + A 不起作用。
Ctrl + X,Ctrl + V - 工作。
这是 Spy++ 中用于 hwnd 的消息日志,其类为“Internet Explorer_Server”。
在 Ctrl + CI 上不接收 WM_COMMAND。
在 Ctrl + X 上:
我不知道为什么。
2. “坏”的捷径确实有效。打印对话框在 Ctrl + P 上调用,网页保存对话框在 Ctrl + S 上调用,等等。在这种情况下我无能为力。无论我在挂钩窗口 proc 中返回什么,它们仍在显示。所以我需要在发送到窗口之前处理它们。
解决方案?
你可以提到,在这个问题的所有解决方案中都有:
- 预翻译消息
- 实际上 TranslateAccelerator
直到此刻,我在挂钩消息过程中只有 TranslateAccelerator。
预翻译必须做这样的事情:
此外,在 PreTranslateMessage 中,我可以过滤“坏”快捷方式而不将它们发送到窗口。
另一个人建议也使用 PretranslateMessage (来自上面线程的对话框):
– 从 CMessageFilter 派生您的窗口,使用 CMessageLoop::AddMessageFilter 安装它,如示例所示实现 PreTranslateMessage。
– 我想我现在已经按照样本的建议做了。但问题是我的“父”窗口没有得到击键 - 它们都转到 IE AX 控件。
– 这就是您需要 CMessageFilter 的原因。在消息被分派到它们的目标窗口之前,它被连接到消息泵中。
好的,但是托管 IWebBrowser2 的我的根窗口没有收到任何键盘消息。此外,我的窗口中没有 PreTranslateMessage,只有窗口 proc 调用(由父级,CWindowImpl)。
如上所述,我可以从 CMessageFilter 派生,实现 PreTranslateMessage,但我无法使用 CMessageLoop::AddMessageFilter 订阅事件,因为我没有创建主窗口并且无权访问它的 CMessageLoop。
那么我现在应该做些什么来完成所有这些工作呢?我应该使用 PreTranslateMessage 以及如何使用?