问题标签 [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.
c++ - IWebBrowser2 接口依赖图
IWebBrowser2 组件是否有接口依赖图?我只想说清楚接口之间存在什么样的依赖关系,谁调用谁?
windows - IWebBrowser2 和多线程单元?
我正在开发一个IWebBrowser2
嵌入了 WebBrowser 控件 ( ) 的 Windows 应用程序。
如果我将 COM 单元初始化为单线程,情况看起来不错:
但是,如果我将其更改为多线程:
然后它开始在所有地方失败,返回值为:
由于应用程序正在调度输入同步调用,因此无法进行传出调用。
从调用 IWebBrowser2 方法。
有人可以告诉我如何解决这个问题吗?我必须使用多线程单元作为要求。请帮忙!
javascript - 从运行在 Web 浏览器控件中的 JavaScript 脚本调用 C++ 函数
我在我的 c++ 应用程序中嵌入了一个 Web 浏览器控件。我希望在 Web 浏览器控件中运行的 javascript 能够调用 c++ 函数/方法。
我发现提到了三种方法来做到这一点:
- 实现一个充当中间人的 ActiveX 组件。(这里的实现细节:http: //blogs.msdn.com/b/nicd/archive/2007/04/18/calling-into-your-bho-from-a-client-script.aspx)
- 使用 window.external。(也在上面的链接中讨论过,但没有提供实现)
- 将自定义对象添加到窗口对象
我想选择第三个选项,但我还没有找到任何关于如何做到这一点的工作示例。有人可以告诉我怎么做,或者链接到网络上某个地方的工作示例。
我发现的最接近的一个例子是 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 。如果可以的话,请分叉和改进:)
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)。
internet-explorer - 如何使用 CoCreateInstance 创建 Internet Explorer 的低完整性实例?
从一个标准的、非提升的、中等完整性的进程,我需要在 Windows Vista 上创建一个 Internet Explorer 7 的实例,并且我需要使用 CoCreateInstance 来完成它。我尝试过使用此线程中概述的技术,但我遇到了一些挑战。我能够降低线程的完整性级别,并使用 CoCreateInstance 启动 IE 实例,但该实例仍处于中等完整性级别。如果我向 CoCreateInstance 提供 CLSCTX_ENABLE_CLOAKING,我会得到一个失败的 HRESULT (0x80080005)。我错过了什么?有谁知道这个从头到尾的工作示例?
c++ - IWebBrowser2 可以将 cookie 存储在用户指定的文件夹中吗?
我正在使用 IWebBrowser2 在 c++ 上开发一个小型 Web 浏览器,问题是当我在浏览器上删除 cookie 时,它们会被 IE 删除,我不想干扰 IE cookie。有没有办法解决这个问题?
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.
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 解决方案来证明这一困难。
c++ - 如何在 C++ 中制作一个没有依赖关系的网络浏览器?
如何在 C++ 中使用 IE 控件或某种 webbrowser 但没有任何外部依赖项?我的意思是可以用纯win api或类似的东西来完成?我知道 c++ 的基础知识,并且我知道使用 webbrowser 控件的方法需要 c++ 库才能工作。
编辑:
对不起,我的问题不清楚,我有时是个菜鸟。我的意思是我希望我编译的 exe 可以在所有窗口上运行,而无需安装任何类型的库,但我也希望我编译的 exe 不需要附带任何 dll,只需附带 exe,它应该得到它需要从基本 Windows 系统工作的所有依赖项(即全新的 winXP(或其他版本)安装)
c++ - 从事件 DISPID_TITLECHANGE 获取 IWebBrowser2 指针
我正在处理浏览器帮助器对象,我正在尝试访问触发事件的 IWebBrowser2。使用 NavigateComplete2 和其他事件,我可以轻松做到这一点,因为我获得了 Invoke 参数上的指针。
但是我在 msdn 上读到了这篇文章,它说 TitleChange 事件的唯一参数是标题,那么如何从事件 TitleChange 中获取指向 webbrowser 界面的指针?
以下是我如何通过其他活动获得它:
我正在使用 Visual Studio 2010。