问题标签 [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 回答
3880 浏览

javascript - 将对象从 Javascript 传递到 C++

我找到了将数组从 Javascript 传递到 C++解决方案,但我还有另一个任务:将对象从 Javascript 传递到 C++(如果我将 IWebBrowser2 与 IDispatch 一起使用)

我的意思是我需要通过带有 JavaScript 对象参数的 window.external.method 调用 C++ 方法

如何访问对象成员“名称”、“组”等?

0 投票
1 回答
382 浏览

vb.net - 在 Web 浏览器控件中检测 CTRL+单击

行!这是我有一个使用 Webbrowser Control 的应用程序的情况,我想检测网页中锚点的点击事件。我不需要代码,只需要查看的方向。


编辑

我没有找到任何问题的解决方案,但发现了一个 hack Control.ModifierKeys,这工作到现在!

0 投票
2 回答
1305 浏览

winapi - 使 IWebBrowser2 控件对脚本安全

我在我的应用程序中使用 IWebBrowser2 控件来显示外部网页。问题是该对象对于脚本来说是不安全的,并且对 get_Document 的调用失败(返回值是 S_FALSE)。

我已经实现了一个新类 IScriptableWebBrowser2,它继承自 IWebBrowser2 和 IObjectSafety,并尝试使用它来代替 IWebBrowser2,但这并没有成功。

如何使我的 IWebBrowser2 控件对脚本安全?

0 投票
1 回答
7945 浏览

windows - IWebBrowser2 对象使用 IE7 版本,而不是机器上安装的 IE 版本

我正在使用 IE8 浏览器的 Win7 机器上开发(IE9 上也会发生同样的事情)。

我创建了一个应用程序,它在本机窗口中嵌入了一个IWebBrowser2对象。
在该浏览器对象中,我执行一个 javascipt 代码:

我收到以下警报: 在此处输入图像描述

这证实了我之前的担忧——即使在我的机器上安装了 IE8\IE9—— IWebBrowser2对象的行为就好像它是IE7(包括所有烦人的 HTML\CSS 行为)。

有人知道为什么是这样吗?或更好 - 如果有任何可能将浏览器对象嵌入为 IE8\IE9 (用于分发 - 所以它应该是合法的)

谢谢,

0 投票
1 回答
1191 浏览

c++ - 为什么没有释放对我的 IDispatch 对象的所有引用?

我在我的 C++ 程序中托管一个 IWebBrowser2 控件,只使用普通的 Win32(没有 mfc、atl、wtl 等)。在 DISPID_NAVIGATECOMPLETE2 上,我添加了一个自定义对象,可以从显示的网页上运行的 javascript 访问。

要添加自定义对象,我使用 DISPATCH_PROPERTYPUT 调用 InvokeEx 和带有指向自定义对象的指针的 DISPARAMS 结构。

在调用 InvokeEx 期间,我的自定义对象的 AddRef 函数被调用,并且我增加了它的引用计数器。但是对象永远不会调用它的 Release 函数,所以引用计数器永远不会再次减少到零。

在 InvokeEx 中调用 AddRef() 之后,谁负责调用 Release()?

编辑:(添加一些代码)

这是将我的自定义对象添加到 IHTMLWindow2 的代码。custObj指向我的自定义对象

这是我要添加的对象(为简洁起见,省略了一些私人成员)

编辑2:

现在它似乎可以正常工作了,我决定把它放在 github 上。

https://github.com/Tobbe/CppIEEmbed。如果可以的话,请分叉和改进:)

0 投票
1 回答
628 浏览

save - IPersistStreamInit::Save() 在 IE9 中不起作用?

此代码适用于 IE8 及更早版本。对于 IE9,IPersistStreamInit::Save() 似乎返回 E_NOTIMPL。任何帮助是极大的赞赏!

0 投票
1 回答
836 浏览

iwebbrowser2 - IWebBrowser2 IHTMLDocument2 CTRL+F 对话框出现但找不到匹配项

我使用 IHTMLDocument2 write(SAFEARRAY) 方法从存储在数据库中的字符串生成 HTML 页面。这工作正常。当按下 CTRL+F 时,“查找”对话框会按预期出现,但从来没有任何匹配项。CTRL+F 搜索的是什么?搜索查看的对象是否丢失(我必须创建)?这是一些相关的代码:

答:正如@Yahia 所建议的,这是一个焦点问题。我在 m_document->write(safe_array) 语句之后添加了 m_document->execCommand("Refresh",...) ,就像我从上下文菜单 Ctrl-F 执行“刷新”时一样,按预期工作。这解决了“焦点问题”。

0 投票
5 回答
3370 浏览

c++ - 抑制 IE8 (C++) 中的脚本错误

我想防止 IE 显示 JS 错误对话框,我读到可以通过设置 ScriptErrorsSuppressed = true 来完成。

我在 IWebBrowser2 中究竟在哪里设置它?

谢谢

0 投票
1 回答
1433 浏览

internet-explorer - WatiN、Internet Explorer 启动和 IWebBrowser2 窗口句柄

我正在研究来自 WatiN 的以下代码,它处理启动和附加到 Internet Explorer:

WatiN 所做的是它启动 Internet Explorer 并等待它得到它的 .MainWindowHandle (这是在 Internet Explorer 中显示内容的“窗口”的句柄)。一旦它获得了这个窗口句柄,它就会得到一个在用户桌面上启动并运行的所有 IWebBrowser2 窗口的列表,并尝试将进程的 .MainWindowHandle 与一个(如果有的话)窗口句柄相匹配。 IWebBrowser2 集合。

这种方法最重要的问题是 IWebBrowser2.HWND 属性(需要与 .MainWindowHandle 进行比较)可能非常有问题、不稳定和喜怒无常,因为它在您尝试访问它时每隔一次抛出 InvalidCastException(至少在我正在运行测试的机器)。然后又是这样一个操作的开销。

这是我对任何可能更了解我在 Windows 编程方面的知识的人的问题:既然 HWND 无论如何都会匹配,为什么我们不使用 .MainWindowHandle 值立即检索所需的 IWebBrowser2(请参阅上面注释掉的代码) 通过使用以下方法(受 WatiN 本身在 ShellWindow2.cs 中使用的代码的启发):

(作为旁注,我们甚至可以制作一个代理对象,在我的另一篇文章中进行了描述,以缓存窗口句柄,以避免向 IWebBrowser2.HWND 询问)。

这对我来说很好。我看不到 HWND 之间有任何冲突或不匹配——不知道是否有我可能错过的极端情况。我很想在 WatiN 论坛上问这个问题,但我想先在 Programmers' Central 上问一下,以防我遗漏了一些明显的东西。

谢谢大家。任何提示表示赞赏。

干杯,多米尼克

0 投票
3 回答
7039 浏览

c++ - 如何彻底销毁 WebBrowser 控件

我在 VisualC++10 中使用 ATL 来托管浏览器控件。我的代码类似于这个例子: http: //msdn.microsoft.com/en-us/library/9d0714y1 (v=vs.80).aspx

区别是我有主窗口,然后子窗口托管浏览器控件。2 分钟后,我必须关闭浏览器,完全杀死浏览器 activeX,但这个子窗口应该是活动的并做其他事情。但不知何故,这个浏览器控件仍然留在那里,我可以看到滚动条或其他东西..

我还尝试通过为现有子窗口创建子窗口,然后在关闭浏览器时销毁这个孩子的孩子 - 但它仍然不起作用!

这就是我关闭的方式:

谢谢!