非 IE WebBrowser ActiveX 控件

Posted

技术标签:

【中文标题】非 IE WebBrowser ActiveX 控件【英文标题】:Non-IE WebBrowser ActiveX control 【发布时间】:2011-12-21 05:43:51 【问题描述】:

Google 搜索将我带入了一堆死胡同。 我正在用 VBA 开发一个 Excel 插件,其中一部分涉及使用 WebBrowser 控件在表单中显示(已知)网页并访问其 DOM 组件。

不幸的是,这让我对用户的 Internet Explorer 版本一时心血来潮。 对于我们实际的网页,我们可以使用 Chrome Frame 支持,让 IE 用户以我们想要的方式看到页面,而不用担心他们的浏览器版本,但是 WebBrowser 控件看不到浏览器插件。

我查看了 WebKit.NET 和 GeckoFX。 它们有点工作,但除非我完全遗漏了什么,否则它们似乎根本没有 javascript 或 CSS 引擎。或者(在 GeckoFX 的情况下),他们使用的是旧引擎。这使它们毫无用处。

是否有任何 ActiveX 控件可以嵌入到 VBA 表单中,其工作方式类似于 WebBrowser 控件(具有相似但不相同的 API),使用不同的渲染引擎来跟上最新版本的 Mozilla/ Chrome/Opera,并且仍然正确支持 Javascript 和 CSS?

谢谢!

(基于 cmets 的一些修改)

再次编辑:我从下面的一个答案中发现,我正在查看 GeckoFX 的过时版本,但最新版本看起来很有希望。但现在我有一个新的相关问题:如何在 VBA 中包含 GeckoFX? Windows 不允许我将其注册为 COM 对象。我是否必须以某种方式从源代码自己构建它?还是什么?

【问题讨论】:

GeckoFX 似乎同时支持 CSS 和 JavaScript。为什么你认为没有? 当我尝试将它指向我的测试页面(使用 javascript 和 jqueryUI)时,我看到了一个朴素、丑陋的无 CSS 页面。就像我说的,也许我做错了什么。 哦,对了,另一件事,GeckoFX 文档说它最适合 Firefox 3.5 引擎;我真的需要可以与最新最好的(Firefox 7-ish、Chrome 甚至 Opera)一起使用的东西 依赖IE有这么大的问题吗? IE 有很多兼容性设置来确保跨版本的共同行为(从 7 到 9 主要是因为 6 几乎死了)。参照msdn.microsoft.com/en-us/ie/cc405106 不幸的是,该插件的大多数目标用户都在使用 IE6 的 XP 上;我们可以“强烈建议”他们升级到 8(但不是 9,由于操作系统的限制),但是如果我使用标准的 WebBrowser,我几乎必须确保它与 6 一起使用。 【参考方案1】:

Gecokfx 支持最高 33.0 的 Firefox

https://bitbucket.org/geckofx/geckofx/wiki/Version_lists

它同时支持 Javascript 和 CSS。

【讨论】:

如果是这样的话,那么我从谷歌搜索中找到的 geckofx 的文档/主页已经过时了。谢谢你的链接,我去看看。 OK.. 可能很愚蠢的后续问题:如何将它包含在我的 VBA 项目中?我无法 regsvr32 DLL,也无法将其作为参考。 对VB一无所知,但它不是COM Dll,因此您不必执行regsvr32。如果 dll 是使用比您的目标更高版本的 .net 框架构建的,那么您可能无法添加它。我认为它是一个 .net 3.5 的目标 dll。 VBA(至少对于我坚持使用的 Office 2003)不是 .NET 。我需要能够在 VBA 项目中包含 GeckoFX DLL。通常是通过注册一个 COM 对象或向其中添加一个“引用”。这是一个更大的问题,应该是它自己单独的***问题吗? :)【参考方案2】:

如果您希望它在旧版 VBA 中工作,您需要一个带有 ActiveX 包装器的浏览器。

Mozilla ActiveX 控件符合要求,但它似乎已死。 (它存在于 Mozilla Prism 中,现在是 Chromeless,但它没有二进制下载。显然你可以从 XULRunner 源代码中自己构建它,但这可能并不简单。)

将 GeckoFX 构建为 ActiveX 控件可能并不难。

【讨论】:

将 .NET 组件转换为 ActiveX 控件不在我的技能范围之内。我真的很惊讶没有人这样做(或者我的谷歌技能太差了)。 换句话说:就我的目的而言,使用 WebBrowser 对象并告诉我的用户如果他们拥有 IE8 或 9,他们的体验将会得到改善,这可能就足够了。但现在这是对未来的好奇。 我也很惊讶,目前似乎没有任何支持的浏览器在 ActiveX 控件中(IE 除外),但我也找不到。【参考方案3】:

如果您使用 GeckoFX 或 Chrome Frame,您将受制于用户的 Firefox 或 Chrome 版本。除了为您的用户指定基线版本之外,没有其他方法可以解决此问题。

如果您不能这样做,我建议您解决 VBA 代码中的差异。

换句话说:使用IE WebBrowser控件,因为它保证安装在某个版本或另一个版本中,并且要么指定IE的最低版本(我建议IE6,每个人都应该拥有)并通过检测来应对差异版本并解决与 VBA 的差异。

【讨论】:

对于 GeckoFX 而言,这不再适用,您下载并将其指向特定的 xulrunner (Firefox)。最新版本甚至包括它。

以上是关于非 IE WebBrowser ActiveX 控件的主要内容,如果未能解决你的问题,请参考以下文章

WebBrowser.ExecWB

VB.net webbrowser如何使用IE11内核?IE7内核很多网站不支持!

vb6开发的软件,webbrowser 如何调用非IE的内核,我想调用火狐或谷歌的内核

WebBrowser 控件和 JavaScript 错误

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

Silverlight 中的webBrowser控件打开的网页怎么才能加载ActiveX控件