c# asp.net 从IE中启用ActiveX 控件中的事件和捕捉并响应

 概要:

在客户端计算机上运行的任何应用程序可以自动从 web 页中。下面的文章将提供有关完成此使用 ASP.NET 和 C# 和编写脚本的详细的步骤。方法演示如何启用 ActiveX 控件中的事件和捕捉并响应在 Internet Explorer 中的这些事件。

触发并接收 InternetExplorer 中的事件

当托管的ActiveX控件嵌入(embedded)到web窗体中,你一定要了解,ActiveX触发的事件不会在服务器上执行。它可能你会这样做,因为在code-behind中编写代码。可是,该代码实际上在客户端触发ActiveX控件. 之间的细微差别意味着在web浏览器中汇总,或处理这些事件是可能的。 概念验证 就是在客户端自动运行windows media,从而导致应用程序加载不正确的文件。不正确的文件将会触发该 ActiveX 控件中的 Windows media 错误。该错误将传递到 Internet Explorer 的错误事件。

1.创建用户控件

打开vs2005,创建一个winform控件库项目,并命名为ActiveControl.

添加名为“Fire”的按钮,并设置标题为“开始”,在按钮上面添加一个标签,设置text属性为“Press to start”.下面是完整代码。

 

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace IEWinEvents
{
         //this class is used to make error messages available on the client
         publicclassErrObject
         {
              privatestring _msg;
 
              public ErrObject(string str)
              {
                      _msg = str;
              }
 
              //public properties enable javascript to access the internal class members on the client
              publicstring Message
              {
                  get { return _msg; }
                  set { _msg = value; }
             }
        }
 
        //delegate to handle error condition
        publicdelegatevoidErrorEventHandler(object e);
        [GuidAttribute("9819EE05-86A4-43a8-AF62-A7AFFA69AB1B")]
        [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]
        publicinterfaceControlEvents
        {
                  //Add a DispIdAttribute to any members in the source interface to specify the COM DispId.
                  [DispIdAttribute(0x60020000)]
                  void ErrorEvent(object e);
        }
 
        [ClassInterface(ClassInterfaceType.None), ComSourceInterfaces(typeof(ControlEvents))]
        publicpartialclassActiveXControl : UserControl
        {
              event IEWinEvents.ErrorEventHandler ErrorEvent;
              privatestatic WMPLib.WindowsMediaPlayer Player;
              public ActiveXControl() : base()
              {
                   InitializeComponent();
              }
 
              privatevoid Start_Click(object sender, EventArgs e)
              {
                      Player = new WMPLib.WindowsMediaPlayer();
                      Player.MediaError += new WMPLib._WMPOCXEvents_MediaErrorEventHandler(Player_MediaError);
                      Player.URL = "invalidFile.wma";
                      Player.controls.play();
                      Player.uiMode = "mini";
              }
 
              void Player_MediaError(object pMediaObject)
              {
                   //display a message 
                   MessageBox.Show("Failed");
 
                   notify all subscribers including IE sinks
                   if (ErrorEvent != null)
                   {
                        ErrorEvent(newErrObject("Invalid file name"));
                   }
               }
        }
}
View Code

向项目添加引用Micrososoft windows media player.为此,右键microsoft visual studio解决方案资源管理器中的项目并选择添加引用,在com组件选项卡,选择windows media player,然后单击确定。

 

 

 

 

 

盲点补充:js文件标签中的属性for ,event

<script language= "javascript " for= "window " event= "onload ">

EVENT   event   设置或获取脚本编写用于的事件  

FOR   htmlFor   设置或获取绑定到事件脚本的对象。

可以这样理解。

<script   language= "javascript "   for= "window "   event= "onload ">

相当于 <script   language= "javascript ">

//   绑定 window.attachEvent( "onload ",function()   { //   TODO })

</script>  

FOR 后面跟的是一个控件的ID,比如<object id="window"><object>这可能是一个组件。比如在线编辑器,word内嵌的编辑器等

EVENT是指下面的javaScript脚本是在页面载入的时候调用

 

 

文章来源:http://support.microsoft.com/kb/555687

activex控件制作入门:http://www.newxing.com/Tech/DotNet/CSharp/ActiveX_274.html

activex资料参考:http://www.cnblogs.com/qmfsun/archive/2013/06/11/3132004.html

com基础:http://www.cnblogs.com/jyz/archive/2008/04/11/1148447.html

activex组件和js交互资料:http://blog.chinaunix.net/uid-15753628-id-3999031.html

 

 

posted @ 2014-06-28 22:37  造梦者2013  阅读(677)  评论(0)    收藏  举报