IWebBrowser2 似乎没有执行 javascript

IWebBrowser2 seemingly not executing javascript

我们程序的用户偶尔需要从第三方网站下载数据库,这需要他们登录并指定参数才能获得正确的数据库。我正在尝试将其合并到我们的程序中,这样用户就不必打开单独的浏览器,也可以让我们的程序在下载后访问数据库。

我已经按照 Microsoft 的“使用 MFC 托管 Web 浏览器控件”中的说明将 Web 浏览器嵌入到对话框中,但它似乎无法正确执行某些网站的 javascript。我可以使用 IE、Chrome 或 Firefox 浏览网站。然而,通过嵌入式浏览器浏览网站会产生多个脚本错误,其行为方式与在独立浏览器中完全不同,最终会阻止用户访问所需的数据库。我检查了网站源代码,似乎 javascript 中指定的某些默认值未被访问,某些功能未被执行。我收到的一些错误消息是:

‘console’ is undefined ( the javascript is attempting to log messages to the console - I don’t think this has much effect on website content )

The value of the property ‘SelectSpectralModel’ is null or undefined, not a Function object 

(SelectSpectralModel 是一个 javascript 函数,用于确定显示哪些信息框,用户可以从中选择所需的内容)

我注意到 运行在 Microsoft Visual Studio 调试模式下运行代码时,在尝试浏览网站时经常出现以下消息:

First-chance exception ….: Microsoft C++ exception: Js::JavascriptExceptionObject at memory location…..

我在调试中启用了异常以尝试定位错误,但是当代码中断时,我不知道错误实际发生在哪里。

我似乎无法在网上找到任何关于为什么会发生这种情况的信息。我找到了很多关于 IWebBrowser2 的信息,但没有任何关于这个特定问题的信息。我还找到了一些关于某人想出的解决方法(针对不同的问题,但它似乎可能有所帮助)使用 OLE Automation 运行 Internet Explorer 的实例,但在这个时间点,我必须做更多的阅读才能弄清楚这是如何完成的。

如果我能尝试解决此问题,甚至在合并解决方法方面提供一些帮助,我们将不胜感激。

Microsoft Embedded Web Browser 控件以文档模式 7 运行。因此,如果您使用 Fiddler 查看用户代理字符串,您将看到 IE 7 用户代理字符串。它也使用IE7的渲染和网络标准。

要覆盖它并让它使用 IE11 标准,您必须创建一个特定于您的可执行文件的注册表项。

 HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER)\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION

                 contoso.exe = (DWORD) 00009000

MSDN documentation