我们程序的用户偶尔不得不从第三方网站下载数据库,这需要他们登录并指定参数才能获得正确的数据库。我正试图将此纳入我们的程序,以便用户不必打开单独的浏览器,也使我们的程序可以在下载时访问数据库。
我已经嵌入了一个web浏览器到一个对话框中指定在微软的"使用MFC托管一个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…..
我在调试中启用了Exceptions,试图定位错误,但是当代码中断时,我不知道错误实际发生在哪里。
我在网上找不到任何关于为什么会发生这种情况的信息。我找到了很多关于IWebBrowser2的信息,但是没有一个是关于这个特殊问题的。我还找到了一些关于使用OLE自动化来运行Internet Explorer实例的解决方案(针对不同的问题,但似乎可能有所帮助),但在这个时间点上,我必须做更多的阅读来弄清楚这是如何完成的。
任何帮助,我可以得到试图纠正这个问题,甚至一些帮助,在结合一个变通方法,我将非常感激。
microsoftembedded Web Browser控件以文档模式7运行。因此,如果您要使用Fiddler来查看User-agent-string,您将看到IE 7用户代理字符串。它也使用IE7的渲染和web标准。
要覆盖这个并让它使用IE11标准,你必须为你的可执行文件创建一个注册表项。
HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER)SOFTWAREMicrosoftInternet ExplorerMainFeatureControlFEATURE_BROWSER_EMULATION
contoso.exe = (DWORD) 00009000
请参阅MSDN文档中的