在FireFox3.5下监听播放停止事件

    现在,添加如下代码


    运行效果如下:


    运行状态是数字,具体代表的含义请参考:http://msdn.microsoft.com/en-us/library/dd564085%28VS.85%29.aspx


    到目前为止,我已经能够控制Player.Controls对象的方法,并处理Player的StateChange事件。基本达到了我的要求。后面,要看一下IE浏览器下有什么差别。


在IE6.0下的控制

    JavaScript脚本执行错误,函数fnGetMedia返回的对象为null。主要原因是IE需要使用object和classid来代表ActiveX控件,微软总是不愿意完全遵守web标准。这时候,ice:outputMedia生成的html代码和先前有所区别,如下:


    这时候,fnGetMedia函数中的var p=document.getElementById("f1:m0")得到的p就是Player.Controls对象。所以只需要直接返回即可。现在,修改一下代码,使得函数能够适应IE和Firefox两种浏览器。

function fnGetMedia(){

                var player=document.getElementById("f1:m0");

                if(player==null)

                    return null;

                if(player.controls!=null){

                    return player.controls;

                }else{

                    return player;

                }

            }


    符合潮流,不要去判断浏览器,而判断当前浏览器是否支持需要的功能。因为浏览器太多了(上百种),没有办法判断完。所幸,除了微软的IE,大多数其他主流浏览器都和web标准比较接近。

在IE6.0下处理事件

    Firefox下的事件函数需要修改为如下形式


    一个值得注意的事情是,同一个事件可能会多次调用一个函数,事件函数必须要防止这种事情导致的错误。比较好的判断方法是每次将事件类别(eventType)保存到隐藏tag中,下一次收到的如果和上一次的eventType相同,则说明是重复的,可以忽略,只有不同才认为有效。