tudou如何判断浏览器的FLASH插件

 

项目用到,所以花点时间分析,这里记录下来备份和分享

 

土豆完全通过javascript来判断,我们不能暴力修改这些javascript,但是我们可以修改我们自己的plugins来满足其判断条件。

 

1 flash的object HTML块是通过javascript动态生成的,如下

<DIV class="player">
            <SCRIPT>
            tudouPlayer.load({ iid: iid, lid: lid, name: 'playerObject',
                    player: "http://js.tudouui.com/bin/player_online/TudouVideoPlayer_Homer_152.swf",
                    mobile: "http://js.tudouui.com/bin/player_online/as2player_0.swf",
                    mini: "http://js.tudouui.com/bin/tudoumini/TudouMini_36.swf"
            });
        </SCRIPT>
</DIV>

 

2 这里的load函数会判断:

if ((/apple.*mobile.*safari/.test(navigator.userAgent.toLowerCase()))){ 。。。 }

如果你的浏览器的userAgent不幸含有“/apple.*mobile.*safari/”这个正则规则,很不幸,土豆认为您是使用iPad。

虽然,Android 2.2的浏览器也符合这个正则规则!!

 

3 判断flash插件是否安装,以及版本符合要求:

 if (navigator.plugins && navigator.mimeTypes.length) {
        var a = navigator.plugins["Shockwave Flash"];
        if (a && a.description) {
            b = a.description.replace(/^/D+/, "").replace(//s*r/, ".").replace(//s*[a-z]+/d*/, ".0").split(".")
        }
    } else { 。。。 }

你自己的插件必须叫“Shockwave Flash”,其description必须满足被上面的正则刷过以后返回3位数组,而且数组[0]的值大于9

直接抄袭Adobe Flash插件就是了,这么麻烦去想它干什么?

以下是我firefox地址栏输入:about:plugins的相关打印,供参考。

Shockwave Flash

文件: libflashplayer.so
版本:
Shockwave Flash 10.1 r82
MIME 类型 描述 后缀 已启用
application/x-shockwave-flash Shockwave Flash swf
application/futuresplash FutureSplash Player spl

 

 


二补充,土豆如何取的真正视频地址:============= 2010 08 23=======

在满足上述条件以后,我们会得到一个通过javascript生成的<objecet> ... </object> 块。下面对这个object块进行说明:

---------

<object id="playerObject" width="100%" height="100%" name="playerObject" data="http://js.tudouui.com/bin/player_online/TudouVideoPlayer_Homer_152.swf" style="" type="application/x-shockwave-flash"><param name="bgcolor" value="#000000"><param name="allowfullscreen" value="true"><param name="allowscriptaccess" value="always"><param name="quality" value="high"><param name="flashvars" value="iid=57694134&amp;lid=9877405&amp;uid=0&amp;channel=0&amp;default_skin=0&amp;tudouMini=http://js.tudouui.com/bin/tudoumini/TudouMini_36.swf&amp;hd=0&amp;referrer=&amp;href=http%3A%2F%2Flocalhost%2F1.htm&amp;USER_AGENT=Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.127 Safari/533.4&amp;document_title=&amp;juid=bcgn14049ck&amp;isRec=0&amp;durl=http://fpdownload.macromedia.com/get/flashplayer/current/licensing/win/install_flash_player_plugin.msi&amp;ports=100:0&amp;statratio=1000&amp;safekey=IAlsoNeverKnow&amp;gettime=tudouLoadTime.get&amp;theme=black&amp;noHd=0&amp;cs=350&amp;ct=180&amp;ca=0&amp;cb=0.1&amp;ctime=5000&amp;cp=20&amp;nc=0&amp;actionID=0&amp;ID=0&amp;adOwnerId=0&amp;adPositionId=0&amp;isNielson=0&amp;isRenhe=0&amp;playHd=0&amp;vurl="></object>

---------

在进一步精简后得到:

-------------

<object width="100%" height="100%"
data="http://js.tudouui.com/bin/player_online/TudouVideoPlayer_Homer_152.swf"
type="application/x-shockwave-flash"
>
<param name="flashvars" value="iid=57694134&amp; >
</object>

-------------

走到这里我们发现土豆的整体思路是:通过javascript取得相关参数,format成HTML的object块,然后通过“flashvars"将视频的具体参数发送到”TudouVideoPlayer_Homer_152.swf“这个flash文件由它和服务器通讯,取得最终需要播放的视频文件。

剩下的事情:

1 研究这个swf文件,得到其算法,通讯协议

2 在设备上播放这个swf文件

 

 

 

 

三,研究结果

To Be Continue...

你可能感兴趣的:(tudou如何判断浏览器的FLASH插件)