2013-02-13 85 views
0

我需要实现VLC ActiveX的所有JavaScript事件。如何测试VLC ActiveX的事件

问题是,所有事件都是触发的,我不确定代码中出了什么问题。

当视频结束时,我至少需要看到一些警告消息。

正是在这里>>>registerVLCEvent('MediaPlayerEndReached', handleEvents);

但没有喜悦。

代码:

<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <meta http-equiv="X-UA-Compatible" content="IE=9"> 
    <meta http-equiv="cache-control" content="max-age=0" /> 
    <meta http-equiv="cache-control" content="no-cache" /> 
    <meta http-equiv="expires" content="0" /> 
    <meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" /> 
    <meta http-equiv="pragma" content="no-cache" /> 
    <title></title> 
    <script type="text/javascript" src="jquery.js"></script> 
    <script type="text/javascript"> 

     function getVLC(name) { 
      if (window.document[name]) { 
       return window.document[name]; 
      } 
      if (navigator.appName.indexOf("Microsoft Internet") == -1) { 
       if (document.embeds && document.embeds[name]) 
        return document.embeds[name]; 
      } 
      else // if (navigator.appName.indexOf("Microsoft Internet")!=-1) 
      { 
       return document.getElementById(name); 
       //return getRawObject(name); 
      } 
     } 


     function registerVLCEvent(event, handler) { 
      var vlc = getVLC("vlc2"); 

      if (vlc) { 
       if (vlc.attachEvent) { 
        // Microsoft 
        vlc.attachEvent(event, handler); 
       } 
       else if (vlc.addEventListener) { 
        // Mozilla: DOM level 2 
        vlc.addEventListener(event, handler, false); 
       } 
       else { 
        // DOM level 0 
        vlc["on" + event] = handler; 
       } 
      } 
     } 

     // stop listening to event 
     function unregisterVLCEvent(event, handler) { 
      var vlc = getVLC("vlc2"); 
      if (vlc) { 
       if (vlc.detachEvent) { 
        // Microsoft 
        vlc.detachEvent(event, handler); 
       } 
       else if (vlc.removeEventListener) { 
        // Mozilla: DOM level 2 
        vlc.removeEventListener(event, handler, false); 
       } 
       else { 
        // DOM level 0 
        vlc["on" + event] = null; 
       } 
      } 
     } 

     // event callback function for testing 
     function handleEvents(event) { 
      if (!event) 
       event = window.event; // IE 
      if (event.target) { 
       // Netscape based browser 
       targ = event.target; 
      } else if (event.srcElement) { 
       // ActiveX 
       targ = event.srcElement; 
      } else { 
       // No event object, just the value 
       alert("Event value" + event); 
       return; 
      } 

      if (targ.nodeType == 3) // defeat Safari bug 
       targ = targ.parentNode; 
      alert("Event " + event.type + " has fired from " + targ); 
     } 

     // handle mouse grab event from video filter 
     function handleMouseGrab(event, X, Y) { 
      if (!event) 
       event = window.event; // IE 
      alert("new position (" + X + "," + Y + ")"); 
     } 

     $(document).ready(function() { 
      // Register a bunch of callbacks. 
      registerVLCEvent('MediaPlayerNothingSpecial', handleEvents); 
      registerVLCEvent('MediaPlayerOpening', handleEvents); 
      registerVLCEvent('MediaPlayerBuffering', handleEvents); 
      registerVLCEvent('MediaPlayerPlaying', handleEvents); 
      registerVLCEvent('MediaPlayerPaused', handleEvents); 
      registerVLCEvent('MediaPlayerForward', handleEvents); 
      registerVLCEvent('MediaPlayerBackward', handleEvents); 
      registerVLCEvent('MediaPlayerEncounteredError', handleEvents); 
      registerVLCEvent('MediaPlayerEndReached', handleEvents); 
      registerVLCEvent('MediaPlayerTimeChanged', handleEvents); 
      registerVLCEvent('MediaPlayerPositionChanged', handleEvents); 
      registerVLCEvent('MediaPlayerSeekableChanged', handleEvents); 
      registerVLCEvent('MediaPlayerPausableChanged', handleEvents); 



     }); 




    </script> 
</head> 
<body> 
    <object width="720" height="408" id='vlc2' events="True" codebase="http://downloads.videolan.org/pub/videolan/vlc/latest/win32/axvlc.cab" 
     classid="clsid:9BE31822-FDAD-461B-AD51-BE1D1C159921"> 
     <embed type="application/x-vlc-plugin" pluginspage="http://www.videolan.org" version="VideoLAN.VLCPlugin.2" 
      width="720" height="408" id="vlc1" /> 
     <param name="src" value="http://content.bitsontherun.com/videos/bkaovAYt-52qL9xLP.mp4" /> 
     <param name="ShowDisplay" value="True" /> 
     <param name="AutoPlay" value="False" /> 
    </object> 
</body> 
</html> 
+0

当然,当你调用registerVLCEvent存在VLC对象?你似乎没有在等待页面加载 – 2013-02-13 15:43:35

回答

1

嗯......这样的事件不工作...

因此,我认为最好的办法是TI实现在C#侧一些方法(调用)或在HTML端获取vlc.input.state值。

下面是HTML的例子:

$(document).ready(function() { 
      start_timer = setInterval(function() { 
       var vlc = getVLC("vlc2"); 
       var s = vlc.input.state; 
       // alert(s); 
      }, 
     1000); 
     }); 
+0

你能详细说明这是如何工作的吗? – ElHaix 2013-08-26 23:47:53