移除 IE 中 ActiveX 对象的激活






3.65/5 (8投票s)
2006年5月18日
3分钟阅读

220334

925
一个可以与任何 ASP.NET Web 控件一起使用的类,用于自动激活 IE 中的交互式控件
引言
针对 Internet Explorer 的最新 Microsoft 补丁程序包含对 ActiveX 的一项更改,要求所有交互式控件在使用前必须激活。 这一更改影响了全球的 Web 应用程序,包括 Dundas 产品。
图 1:渲染为 Flash 图像的图表需要激活
虽然在应用此补丁程序后,图表仍可以作为图像或 ActiveX 对象正常查看,但 ActiveX 对象(例如 Flash)中包含的交互功能需要用户首先点击一下。 这种功能并不吸引人,幸运的是,Microsoft 已经发布了一篇文章,详细介绍了如何解决此问题。
我们更进一步,基于 Microsoft 的文章实现了一个类库,您可以将其与任何 Web 控件一起使用,以自动激活交互式控件。 要使用此类库,只需将该类添加到您的解决方案中,并将命名空间 Dundas.Utilities
添加到使用渲染为 ActiveX 对象的 Web 控件的网页中。 此外,您可能需要更改 Web 应用程序根目录的安全性,以允许您的 ASPNET 用户写入。
接下来,Page_Load
事件需要以下代码(请注意,this.Chart1
是渲染为 ActiveX 对象的 Web 控件)
AutoActivateControl autoActivateControl = new AutoActivateControl(this.Chart1);
就这样! 您的控件将不再需要在可以使用交互功能之前激活。
此控件的工作原理
此控件基于以下概念工作:虽然 Internet Explorer 无法自动激活任何直接嵌入其中的控件,但通过外部 JavaScript 文件添加到页面中的对象可以自动激活。 因此,该控件在实例化时执行以下步骤
- 附加到传递给它的 Web 控件的
PreRender
事件。 - 在
PreRender
事件中,强制 Web 控件渲染到内存中,而不是 HTML 输出页面,并将 Web 控件的 Visible 属性设置为 false,使其不渲染到输出页面。 - 然后,控件在应用程序的根文件夹中创建一个名为 embed.js 的 JavaScript 文件(如果该文件被另一个 IIS 线程锁定,该控件将创建一个更独特的文件名,例如 embed723.js)。
- 创建文件后,将向其中添加一行 JavaScript,其中包含 Web 控件的渲染输出。 它看起来像
document.write('<object ...> ... </object>')
- 该控件执行的最后一步是将一行嵌入到 HTML 输出页面中,该行引用此外部 JavaScript 文件
<script src="/embed.js"></script>
更多信息
应该注意的是,本文中提供的信息不是一个“技巧”或“黑客手段”,它是 Microsoft 推荐的方法的实现。 激活功能本身是由涉及直接嵌入浏览器中的交互式对象的专利侵权引起的。 本文中描述的方法是被允许的,因为将其嵌入到外部 JavaScript 文件中意味着它不再直接嵌入到浏览器中。
此外,请注意,这是 Microsoft 建议的直接实现,非常简单。 虽然它在基本情况下有效,但需要在大多数实际环境中进行修改才能工作。 它的提供是为了供那些需要此功能的人进一步修改。