【问题标题】:Webbrowser control behaving different than IEWebbrowser 控件的行为与 IE 不同
【发布时间】:2012-11-13 15:54:13
【问题描述】:

在我的应用程序中,我使用 WebBrowser-Control 来显示本地 HTML 文件。该文件包括 jQuery 和自定义 js 文件。

当我用 IE(本地)打开文件时,一切正常。但是,如果我在我的应用程序中显示带有 WebBrowser 控件的文件,则 JQuery 不能完全正常工作(有些东西可以正常工作,$.(...)addClass('abc') 之类的东西不行)。

有人知道为什么会这样吗?我正在使用Navigate() 导航到 HTML 文件,然后在 WebBrowser 的文档上使用 InvokeScript 来调用使用 jQuery 的 javascript 函数。我还尝试通过导航到 javascript:-URL 来调用该函数,但效果不佳。

感谢您的帮助

【问题讨论】:

  • 是否有必要从InvokeScript而不是原生DOM事件调用它?
  • 是的,我需要从主机应用程序调用它

标签: c# javascript .net html browser


【解决方案1】:

这是一个长镜头,但我已经看到 WebBrowser 控件出于某种原因默认为旧版本的 IE 呈现引擎的实例,即使安装了较新版本的 IE。一些旧版本的 IE 可能会出现 jquery 问题。

尝试添加一些js以确保它使用的是您期望的IE版本。

http://obvcode.blogspot.com/2007/11/easiest-way-to-check-ie-version-with.html

【讨论】:

  • 呵呵,你说得对。 Webbrowser 控件为我提供了第 7 版...我想我要寻找与 IE-7 兼容的版本...
  • @DeX3 您可以添加一个注册表黑客来强制 Web 浏览器控件使用特定版本的 IE。我没有方便的链接,但我相信它在 MSDN 上。我不确定这是否适合您的软件。由于这个问题,我们正在考虑使用 webkit 作为我们的渲染引擎。
【解决方案2】:

Rick Strahl 写了一篇关于这个问题和解决方案的好文章:

http://www.west-wind.com/weblog/posts/2011/May/21/Web-Browser-Control-Specifying-the-IE-Version

 

您必须设置两个注册表项,一个用于 32 位应用程序,一个用于 64 位应用程序。

32 位:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION

值键:yourapplication.exe

 

64 位:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION

值键:yourapplication.exe



将此键设置为 (taken from MSDN here) 作为十进制值:

9999 (0x270F) Internet Explorer 9. 网页在 IE9 中显示 标准模式,与 !DOCTYPE 指令无关。

9000 (0x2328) Internet Explorer 9. 包含的网页 基于标准的 !DOCTYPE 指令以 IE9 模式显示。

8888 (0x22B8) 网页以 IE8 标准模式显示, 无论 !DOCTYPE 指令如何。

8000 (0x1F40) 包含基于标准的 !DOCTYPE 指令的网页 以IE8模式显示。

7000 (0x1B58) 包含基于标准的 !DOCTYPE 指令的网页 以 IE7 标准模式显示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-04
    • 2011-12-14
    • 2023-03-14
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 2013-08-02
    相关资源
    最近更新 更多