Write the Code. Change the World.

6月 13

场景

从前,flash非常流行,非常好用。现在,flash还是有它的用武之地。比如复制剪贴板(js没法完美解决剪贴板的复制),音视频直播,跨平台使用(air)等。但是,flash player渐渐多地遇到被禁用,未安装的尴尬情况。对于使用flash的项目,这个问题就需要解决。

分析

这里拿企鹅电竟为例。


chrome下,flash player被禁用

ie下,没有安装flash player


flash player无论是未安装,还是被禁用,都提示flash player版本过低,让用户点击操作。经过测试,点击更新Flash>按钮后。在chrome下,会弹出是否允许flash运行的对话框,在ie下,会跳转到adobe官网的flash player的下载页面。

这已经达到了目的。
1. 功能实现了。
2. 让用户操作简单。

思路

既然能做出相应的处理,那就能够判断浏览器是否安装了flash player以及是否被chrome、firefox禁用。

先js判断浏览器是否安装或禁用了flash player(这两种的行为的一致性。无论哪种,只需判断是否存在flash player插件)

function hasFlash()
{
    if(typeof window.ActiveXObject != "undefined")
    {
        try
        {
            return new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
        }
        catch(e)
        {
            return false;
        }
    }
    else
    {
        return navigator.plugins['Shockwave Flash'];
    }
}

再根据判断做对应处理。如果flash player 被禁用或未安装,则添加提示,并提供下载flash player的链接。举个例子。

<a href='http://get.adobe.com/cn/flashplayer/'>请更新 Flash player</a>

如果flash player存在,则在html中插入flash的引用。最好用swfobject.js。

注意

链接设置为http://get.adobe.com/cn/flashplayer/时,无论是flash player未安装还是被禁用,浏览器都会做出相应的反应————下载flash player或弹出允许禁止flash player对话框。

相关

如果想获取flash player的具体版本。

function flashData()
{
    var data = {has:0, ver:0}; 
    var swf;

    if(typeof window.ActiveXObject != "undefined")
    {
        try
        {
            swf = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");

            if(swf)
            {
                data.has = 1;
                data.ver = parseInt(swf.GetVariable("$version").split(" ")[1].split(",")[0]);   
            }
        }
        catch(e)
        {

        }
    }
    else
    {
        swf = navigator.plugins['Shockwave Flash'];

        if(swf)
        {
            data.has = 1;
            var words = swf.description.split(" ");  
            for (var i = 0; i< words.length; i++)
            {
                if (isNaN(parseInt(words[i]))) 
                    continue;  

                data.ver = parseInt(words[i]);
            }
        }
    }

    return data;
}

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注