【问题标题】:IE 9 sometimes displays a Red X instead of a .NET Forms control, works in IE 8IE 9 有时会显示红色 X 而不是 .NET Forms 控件,适用于 IE 8
【发布时间】:2012-03-20 21:05:11
【问题描述】:

我正在使用一个 Web 应用程序,该应用程序使用 Internet Explorer 中通过“对象”标签托管的 .NET Windows 窗体用户控件——例如<object id="myObj" height="100%" width="100%" classid="/MyVirtualDir/MyAssembly.dll#MyAssembly.MyControl" name="myObj">

Web 应用程序要求将其添加到“受信任的站点”区域,并且有一个安装程序来调整 CAS 权限。如果我们遇到问题,我们还会检查大量清单,以确保为受信任的站点区域(和高级选项)正确设置权限,以允许 .NET 控件下载和运行。

我们已经为成千上万使用 IE6、IE7 和 IE8 的客户以及超过 95% 的使用 IE9 的客户提供了这项服务。

但是,几乎每周我们都会遇到一些已升级到 IE9 的客户端(作为新 PC 或对现有 PC 的更新),其中 .NET 控件显示为白色框,在左上角。

我们已经做了很多事情来尝试解决这个问题:

  • 我们重新检查了所有“受信任的站点”权限,以确保它们设置正确。
  • 我们已验证高级 Internet 选项都与正常工作的计算机相匹配。
  • 我们会检查 Internet Explorer 插件,并在故障排除时通常会禁用所有插件(尤其是已知会阻止 .NET 控件运行的防病毒插件)
  • 我们检查了几个客户端上的 Internet 临时文件;引用的控件 DLL 没有出现在那里
  • 然后我们安装了 Fiddler2 来监控请求; Fiddler2 显示 IE9 没有请求加载控制 DLL

所以 IE9 似乎根本无法处理“对象”标签。这是我期望在“Internet 区域”中加载的页面会出现这种行为,但我无法弄清楚为什么在受信任区域设置中会发生这种情况。

我从其他人那里搜索了类似的其他问题——我发现的最相似的问题发布在这里 (http://www.pcreview.co.uk/forums/embedded-usercontrol-sometimes-displays-red-x -internet-explor-t3608356.html),但它是从 2008 年(IE9 之前)开始的,没有人回复过。

我们的问题的奇怪之处在于,我们找到的唯一解决方案是卸载 IE9 并恢复到 IE8——这基本上每次都有效!因此,这些客户端上似乎没有组策略设置或其他任何东西阻止 IE 甚至尝试加载 .NET 控件,因为我们可以让它在 IE8 中工作;它只是在 IE9 中不起作用。

有人知道这里会发生什么吗? IE9 中是否有一些额外的设置(或只有 IE9 关注的 Windows 设置)会阻止它在受信任的站点上运行 .NET 控件?

【问题讨论】:

  • 你试过怪癖模式吗?而且,只是出于好奇,您到底想开发什么作为 WinForms 控件来显示在您的网页上?我的意思是,您现在拥有的所有先进网络技术,为什么要使用它?
  • HTML DOCTYPE 应该自动将其置于 Quirks 模式,但我相信有一次我们使用开发者工具尝试了所有不同的模式(IE7、IE8、兼容性视图、标准视图),没有影响。用更新的技术替换这个控件并不容易——它有数十万行代码,所以重写本身将是巨大的,找到替代技术也不容易:我们的客户欣赏网络-基于页面的工作流程/链接,因此他们并不真正想要单击一次或独立的应用程序,但我们需要您无法从 HTML5 或 SL 获得的 FullTrust...

标签: .net internet-explorer user-controls internet-explorer-9


【解决方案1】:

我在寻找相同问题的答案时遇到了这篇文章。对于超过 95% 的用户来说,一切都很好,但对于一些用户来说,它就行不通了。我想我已经将它追溯到正在运行的 IE 版本 - 32 位或 64 位。我认为 32 位是默认版本,它似乎总是对我和我们的用户有用。另一方面,64位根本不起作用。遇到问题的用户通过专门从“开始”菜单中选择 IE9 来运行 32 位版本,并且我的控件正确加载。

【讨论】:

  • 是的——64 位 Internet Explorer 可能无法加载 .NET 控件(尤其是不支持 64 位体系结构的 .NET 1.1 控件)。但是在不工作的机器上,我们已经使用 32 位和 64 位 Internet Explorer 进行了测试,并且 .NET 1.1 和 .NET 2.0 控制都设置为“AnyCPU”架构。这些案例都没有奏效。不过,我相信这些都是 64 位 Windows 7 机器,如果有区别的话。
【解决方案2】:

经过许多论坛帖子和大量猜测,我找到了这个注册表项: HKLM\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\ActiveX 兼容性{00000000-0000-0000-000000000000}\

兼容性标志 = 0x400 (1024)

据我了解,这是应用于 Null GUID 的 ActiveX“Killbits”标志;据我所知,IE9 会查找与 .NET 控件相关的这个键,而 IE8 不会 - 因此它在 IE 8 中可以在同一台机器上使用所有相同的设置。

如果您想了解更多详细信息,我在MSDN forums here 有另一个帖子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 2014-10-22
    • 1970-01-01
    • 2013-01-14
    • 1970-01-01
    • 1970-01-01
    • 2013-01-01
    相关资源
    最近更新 更多