【发布时间】: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