问题标签 [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.

0 投票
3 回答
2742 浏览

delphi - 如何使用 iwebbrowser 2 通过 Internet Explorer 登录 gmail

是否可以使用 iwebbrowser2 登录到 facebook、gmail 等网站?

在下面的代码中,我可以添加什么以便它可以使用我放入变量中的用户名和密码登录到 gmail(使用 ie8 作为浏览器)?

注意:我是新手。

对不起我的英语不好:)

并提前感谢

0 投票
3 回答
4398 浏览

delphi - 实际参数不够?

以下程序error : e2035 not enough actual parameters在 2 个地方(第 39 行和第 45 行)返回并且未编译。有人可以帮我吗?我可以在这里用 0 或 null 代替参数吗?

0 投票
5 回答
8945 浏览

c++ - IWebBrowser2:如何强制链接在新窗口中打开?

WebBrowser Customization上的 MSDN 文档解释了如何防止打开新窗口以及如何取消导航。就我而言,我的应用程序托管了一个 IWebBrowser2,但我不希望用户导航到我的应用程序中的新页面。相反,我想在新的 IE 窗口中打开所有链接。期望的行为是:用户单击一个链接,并打开一个带有该 URL 的新窗口。

在这里提出并回答了一个类似的问题,建议我打开一个新的讨论,而不是污染回答的帖子。

相关帖子上的成员建议我应该能够通过捕获 DISPID_BEFORENAVIGATE2、设置取消标志和编写代码来打开一个新窗口来做到这一点,但我发现浏览器控件获得了很多似乎是 BeforeNavigate2 事件由主页上的脚本启动。例如,amazon.com 疯狂地触发 BeforeNavigate2 事件,它们不是链接调用的结果。

回复赞赏!

0 投票
1 回答
2751 浏览

c++ - 在 IWebBrowser2 OLE 控件中禁用脚本调试?C++

我有一个 IWebBrowser2 我用 .Navigate() 访问一些网页 当页面出现 js 错误时,我收到“语法错误”的警告框,所以我使用了 .put_Silent(TRUE)。现在我收到“VS Just-In-Time Debugger: Unhandled exception”的警告

如何从我的代码中禁用所有脚本错误警告(包括 JIT 调试器)(我的意思是不修改真正的 IE 设置)

0 投票
1 回答
1766 浏览

browser - 如何在没有 UI 的情况下创建 WebBrowser 控件 (ActiveX / IWebBrowser2)?

如果没有在任务栏中创建一个窗口,我无法弄清楚如何使用 WebBrowser 控件。

我直接使用 IWebBrowser2 ActiveX 控件,因为我需要使用一些高级功能,例如阻止下载 JAVA/ActiveX/图像等。这显然在 WPF 或 winforms WebBrowser 包装器中不可用(但这些包装器确实有能力创建没有 UI 的控件)

这是我创建控件的代码:

此代码完美运行,但它在任务栏中显示一个窗口。如果我省略了 DoVerb(OLEDOVERB.OLEIVERB_INPLACEACTIVATE) 调用,则导航到网页无法正常工作。Navigate() 不会下载页面上的所有内容,也不会触发 DocumentComplete 事件。如果我添加一个 DoVerb(OLEIVERB_HIDE),那么我会得到与省略 DoVerb(OLEDOVERB.OLEIVERB_INPLACEACTIVATE) 调用相同的行为。

这似乎是一个非常基本的问题,但我在任何地方都找不到任何示例。

0 投票
0 回答
957 浏览

internet-explorer - 如何获得对通过单击链接打开的 Internet Explorer 窗口的 IWebBrowser2 引用?

假设我打开一个新的 Internet Explorer 窗口,例如,单击 HTML 链接中带有 target="_blank" 的链接。进一步假设我通过 COM 以编程方式这样做。我意识到我可以附加到 DWebBrowserEvents2::NewWindow3 事件,并在打开新窗口时收到通知。如何获得对那个新打开的窗口的引用,以便我也可以操作它?

注意事项:

  • 如果可以的话,我特别不想取消 NewWindow 事件并在 ppDisp 参数中实例化并返回一个新的空白浏览器窗口。
  • 我考虑过搜索每个 IE 窗口(使用 FindWindow 或类似的),询问它的位置,并将其与 bstrUrl 参数进行比较,但我认为如果目标中有重定向,这将不起作用。
  • 这是一个自动化测试框架,所以我专门驱动 Internet Explorer,而不是托管的 WebBrowser 控件。
  • 我完全知道这不会找到由 showModalDialog() 创建的窗口。
0 投票
0 回答
572 浏览

internet-explorer - 在 Internet Explorer/IWebbrowser 中取消所有现有的 HTTP 请求

我正在使用 IWebBrowser API 自动化 Internet Explorer 窗口。有没有办法取消 IE/IWebbrowser 中所有未完成的 HTTP 请求?

我已经尝试了以下方法,但它们都不起作用。

  1. 呼唤IWebBrowser::Stop()。这只会取消导航并且不会阻止现有下载继续进行。

  2. 导航到“ about:blank”。这会阻止发出新的请求,但现有的 HTTP 请求将继续。

  3. 调用Abort()/Terminate()每个IInternetProtocol处理程序。这会导致 IE 崩溃(不足为奇)。

0 投票
1 回答
1285 浏览

.net - IWebBrowser2 HTTP 响应标头

我和Dragos 在这里问的问题一样

“...嗨!我正在开发一个托管 Web 浏览器控件的应用程序。我正在通过 IWebBrowser2 接口访问它。有没有办法以编程方式访问响应标头...”

该解决方案(从 2003 年开始)似乎正在使用直通异步可插拔协议 (APP) 处理程序。这里提供的解决方案是用 C++/ATL 编写的,所以我想知道是否有这个的 c# 版本?

请注意,我已经能够从 IWebBrowser2(和 WatiN)获取 cookie 值,问题是获取原始标头值

0 投票
3 回答
2536 浏览

c++ - C++ COM 设计。组合与多重继承

我正在尝试在我的应用程序 (IWebBrowser2) 中嵌入浏览器控件。我需要实现 IDispatch、IDocHostShowUI、IDocHostUIHandler 等来完成这项工作。我在纯 C++/Win32 api 中执行此操作。我没有使用 ATL、MFC 或任何其他框架。

我有一个名为 TWebf 的主类,它创建一个 Win32 窗口以将浏览器控件放入其中,并使所有需要的 OLE 调用使其工作。它还用于控制浏览器控件,使用 Refresh()、Back()、Forward() 等方法。

现在这是通过组合实现的。TWebf 具有将所有不同接口(IDispatch、IDocHostShowUI ...)实现为(堆栈分配的)成员的类。TWebf 在其构造函数中所做的第一件事是给所有这些成员一个指向自身的指针(dispatch.webf = this;等等)。QueryInterface、AddRef 和 Release 被实现为对 TWebf 中所有接口实现的这些方法的调用return webf->QueryInterface(riid, ppv);(例如通过调用)

我不喜欢 TWebf 和实现接口的类之间的这种循环依赖。TWebf 有一个 TDispatch 成员,该成员有一个 TWebf 成员,该成员有一个......

所以我正在考虑用多重继承来解决这个问题。这也将简化 QueryInterface 以始终能够返回this

我想要的 UMLish 草图是这样的:(点击查看大图)

从 uml 中可以看出,我想提供所有接口的最低限度的实现,所以我只需要覆盖接口中的那些方法,我实际上想在 TWebf 中做一些实质性的事情。

我的“多重继承实现”可能吗?这是个好主意吗?这是最好的解决方案吗?

编辑:

为了将来的讨论,这里是 TWebf 中 QueryInterface 的当前实现

编辑2:

我尝试只为几个接口实现这个。让 TWebf 从 IUnknown 和 TOleClientSite 继承似乎工作正常,但是当我将 TDispatch 添加到继承列表时它停止工作。

除了warning C4584: 'TWebf' : base-class 'IUnknown' is already a base-class of 'TDispatch'警告之外,我还会遇到运行时错误。运行时错误是“访问冲突读取位置 0x00000000”

由于某种原因,运行时错误发生在处理 IOleClientSite 而不是 IDispatch 的行上。我不知道为什么会这样,或者它是否真的与多重继承有关。任何线索任何人?

编辑 3:

QueryInterface 的错误实现似乎是运行时异常的原因。正如Mark Ransom正确指出的,在将 this 指针分配给 *ppv 之前需要对其进行强制转换,并且在请求 IUnknown 时需要特别小心。阅读为什么在具有多重继承的对象中实现 QueryInterface 时我需要显式向上转换,以获得很好的解释。

为什么我仍然不知道那个特定的运行时错误。

0 投票
1 回答
2363 浏览

c++ - 如何让 IWebBrowser 调用我的 IHttpNegotiate 实现?

我使用cwebpage_src代码,我需要在单击链接时更新一些 HTTP 请求标头。据我了解,可以通过 IHttpNegotiate->BeginTransaction 的自我实现来完成。但是如何调用我的 IHttpNegotiate 实现?

谢谢!