【问题标题】:IWebBrowser2 seemingly not executing javascriptIWebBrowser2 似乎没有执行 javascript
【发布时间】:2017-01-11 07:10:10
【问题描述】:

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

我已将 Web 浏览器嵌入到 Microsoft 的“使用 MFC 托管 WebBrowser 控件”中指定的对话框中,但它似乎无法正确执行某些网站的 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 自动化运行 Internet Explorer 的实例,但此时,我必须做更多的阅读以了解这是如何完成的。

如果我能得到任何帮助来尝试解决这个问题,或者甚至是在整合解决方法方面的帮助,我将不胜感激。

【问题讨论】:

    标签: javascript iwebbrowser2


    【解决方案1】:

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

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

     HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER)\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
    
                     contoso.exe = (DWORD) 00009000
    

    在此查看MSDN documentation

    【讨论】:

    • 成功了。但是,它仅在 HKEY_CURRENT_USER 中设置密钥时才有效 - 在 HKEY_LOCAL_MACHINE 中创建密钥不起作用。感谢您的意见。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-19
    • 1970-01-01
    相关资源
    最近更新 更多