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

c++ - IWebBrowser2 接口依赖图

IWebBrowser2 组件是否有接口依赖图?我只想说清楚接口之间存在什么样的依赖关系,谁调用谁?

0 投票
2 回答
1366 浏览

windows - IWebBrowser2 和多线程单元?

我正在开发一个IWebBrowser2嵌入了 WebBrowser 控件 ( ) 的 Windows 应用程序。

如果我将 COM 单元初始化为单线程,情况看起来不错:

但是,如果我将其更改为多线程:

然后它开始在所有地方失败,返回值为:

由于应用程序正在调度输入同步调用,因此无法进行传出调用。

从调用 IWebBrowser2 方法。

有人可以告诉我如何解决这个问题吗?我必须使用多线程单元作为要求。请帮忙!

0 投票
1 回答
16701 浏览

javascript - 从运行在 Web 浏览器控件中的 JavaScript 脚本调用 C++ 函数

我在我的 c++ 应用程序中嵌入了一个 Web 浏览器控件。我希望在 Web 浏览器控件中运行的 javascript 能够调用 c++ 函数/方法。

我发现提到了三种方法来做到这一点:

  1. 实现一个充当中间人的 ActiveX 组件。(这里的实现细节:http: //blogs.msdn.com/b/nicd/archive/2007/04/18/calling-into-your-bho-from-a-client-script.aspx
  2. 使用 window.external。(也在上面的链接中讨论过,但没有提供实现)
  3. 将自定义对象添加到窗口对象

我想选择第三个选项,但我还没有找到任何关于如何做到这一点的工作示例。有人可以告诉我怎么做,或者链接到网络上某个地方的工作示例。

我发现的最接近的一个例子是 Igor Tandetnik 在webbrowser_ctl 新闻组的一个线程中的第一个回复。但恐怕我需要更多的帮助。

我正在嵌入一个 IWebBrowser2 控件,但我没有使用 MFC、ATL 或 WTL。

编辑:

通过 Igor 在我之前链接的线程中给出的伪代码,以及在 codeproject 文章“从 C++ 创建 JavaScript 数组和其他对象”中找到的代码,我已经生成了一些代码。

上面的代码一直运行,所以到目前为止一切看起来都很好。

当我收到 DISPID_NAVIGATECOMPLETE2 DWebBrowserEvents2 事件时,我调用 AddCustomObject 将其传递为*custObj

值得注意的实现可能是

不幸的是,当我尝试使用 javascript 代码中的“JSObject”对象时,我从未收到“Invoke”消息框。

编辑2:

GetIDsOfNames是这样实现的:

这是我的构造函数

将 DISPID_USER_* 常量定义为私有类成员

编辑 3、4 和 5:

转移到一个单独的问题

编辑 6:

从“返回字符串”编辑中提出了一个单独的问题。这样我就可以接受Georg 的回复,因为它回答了原始问题。

编辑 7:

我收到了一些关于完全工作、自包含、示例实现的请求。这是:https ://github.com/Tobbe/CppIEEmbed 。如果可以的话,请分叉和改进:)

0 投票
2 回答
2024 浏览

javascript - 从 C++ 函数返回字符串到 JavaScript

我有一个实现 IDispatch 接口的类(JSObject)。该类暴露给在我的托管 Web 浏览器控件 (IWebBrowser2) 中运行的 JavaScript。

在此处查看有关其工作原理的更多信息:Calling C++ function from JavaScript script running in a web browser control

我可以从我的 JavaScript 代码中调用 JSObject,并且可以接收返回的整数/长整数。但是当函数返回字符串 (BSTR) 时出现问题。

这是IDispatch::Invoke()代码的一部分:

使用上面的代码,您可以alert()返回字符串,但不能添加到它。alert(returnedString + "foo");只会显示“返回的字符串”。“foo”部分不会添加到字符串中。不知何故,字符串的结尾似乎有问题。有什么想法吗?

另外,因为我没有打电话,我会在这里泄漏内存SysFreeString()吗?

编辑:

我暂时包含了 atlbase.h,所以我可以使用CComBSTR. 上面的代码现在看起来像这样:

单步执行该代码肯定表明 pVarResult 一直是“测试字符串”,直到函数返回。但是当我在我的 JavaScript 代码中 alert() 返回的字符串时,我得到了“扩展”。alert(returnedString + "foo")是“扩展的foo”。所以这是朝着正确方向迈出的一小步,因为您可以添加到返回的字符串中。但这也是朝着错误方向迈出的一步,因为返回的字符串不是我真正返回的......

该代码给出的结果与前面清单中的代码相同(使用 CComBSTR)。

0 投票
1 回答
552 浏览

internet-explorer - 如何使用 CoCreateInstance 创建 Internet Explorer 的低完整性实例?

从一个标准的、非提升的、中等完整性的进程,我需要在 Windows Vista 上创建一个 Internet Explorer 7 的实例,并且我需要使用 CoCreateInstance 来完成它。我尝试过使用此线程中概述的技术,但我遇到了一些挑战。我能够降低线程的完整性级别,并使用 CoCreateInstance 启动 IE 实例,但该实例仍处于中等完整性级别。如果我向 CoCreateInstance 提供 CLSCTX_ENABLE_CLOAKING,我会得到一个失败的 HRESULT (0x80080005)。我错过了什么?有谁知道这个从头到尾的工作示例?

0 投票
1 回答
1191 浏览

c++ - IWebBrowser2 可以将 cookie 存储在用户指定的文件夹中吗?

我正在使用 IWebBrowser2 在 c++ 上开发一个小型 Web 浏览器,问题是当我在浏览器上删除 cookie 时,它​​们会被 IE 删除,我不想干扰 IE cookie。有没有办法解决这个问题?

0 投票
1 回答
2117 浏览

internet-explorer - IWebBrowser2 and cookies in IE

We use IWebBrowser2 to display web pages but it seems to not able to see the same cookies as normal IE sees.

For example, if I log in Facebook in IE and check on Remember Me, the next time I open IE and go to Facebook then I will still stay logged in.

However, if I use IWebBrowser2 to go to Facebook, I am not logged in anymore.

It seems to me IWebBrowser2 and IE use two different sets of cookies? If so, how do I make IWebBrowser2 sees the same cookies as IE?

Thank you very much.

0 投票
1 回答
1456 浏览

c++ - 下沉 DWebBrowserEvents2 事件似乎挂起编程导航

我在 MSDN 论坛上发布了这个问题,但我的经验是 Stack Overflow 上的答案质量更好,所以我也在这里发布。正如我之前多次发布的那样,我正在开发一个浏览器自动化框架,从外部进程自动化 Internet Explorer。我的架构如下:我有一个服务器,它打开一个命名管道,我的自动化客户端将命令推送到该管道。服务器解释命令,并在 IWebBrowser2 对象上执行它们,该对象已包装在我自己的 C++ 类中。一切正常,直到我尝试在 IE 实例上接收事件。我的包装类实现了 IDispEventSimpleImpl,但是当我尝试接收事件时,浏览器实例不会以编程方式或通过 UI 响应任何通信。这是我最相关的两种主要方法:

有趣的是,在将其转换为非托管 C++ 之前,我在 C# 中对相同的机制进行了原型设计,以确保我正在尝试的内容能够正常工作,因为我的 C++ 技能与我的 C# 技能不在同一水平。不用说,它在 C# 中工作得很好,但要求这个组件用非托管代码编写。我确信我忽略了 .NET Framework 抽象出来的一些明显的东西,但不管它是什么,它对我来说并不明显。

为了帮助我从错误中吸取教训,我希望能指出 .NET Framework 正在做些什么来让这项工作正常进行。在 C# 版本中,我在管道上使用阻塞 I/O 的单线程,就像我(想我)在这里一样。如果发布的代码片段不足以指向诊断,我非常乐意提供一个完整的 Visual Studio 2008 解决方案来证明这一困难。

0 投票
3 回答
4822 浏览

c++ - 如何在 C++ 中制作一个没有依赖关系的网络浏览器?

如何在 C++ 中使用 IE 控件或某种 webbrowser 但没有任何外部依赖项?我的意思是可以用纯win api或类似的东西来完成?我知道 c++ 的基础知识,并且我知道使用 webbrowser 控件的方法需要 c++ 库才能工作。

编辑:
对不起,我的问题不清楚,我有时是个菜鸟。我的意思是我希望我编译的 exe 可以在所有窗口上运行,而无需安装任何类型的库,但我也希望我编译的 exe 不需要附带任何 dll,只需附带 exe,它应该得到它需要从基本 Windows 系统工作的所有依赖项(即全新的 winXP(或其他版本)安装)

0 投票
2 回答
1965 浏览

c++ - 从事件 DISPID_TITLECHANGE 获取 IWebBrowser2 指针

我正在处理浏览器帮助器对象,我正在尝试访问触发事件的 IWebBrowser2。使用 NavigateComplete2 和其他事件,我可以轻松做到这一点,因为我获得了 Invoke 参数上的指针。

但是我在 msdn 上读到了这篇文章,它说 TitleChange 事件的唯一参数是标题,那么如何从事件 TitleChange 中获取指向 webbrowser 界面的指针?

以下是我如何通过其他活动获得它:

我正在使用 Visual Studio 2010。