场景
从前,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;
}