2005/05/31 | 转载 如何判断客户端是否安装了某个插件
类别(让工作更简单) | 评论(0) | 阅读(355) | 发表于 21:34
如何判断客户端的某个插件是否安装March 20, 2005 at 3:49 am · Filed under Scripts

近日遇到了一些问题,即如何判断客户端是否安装了某个插件、版本是否达到了我们的要求?最常见的就是使用DHTML Behavior中的两个方法:isComponentInstalled和getComponentVersion。
我们先看看msdn上关于这两个方法的说明:
msdn.microsoft.com/…/iscomponentinstalled.asp?frame=true
msdn.microsoft.com/…/getcomponentversion.asp?frame=true

代码示例:

<span style="behavior:url(#default#clientCaps)" id="info"></span>

<script type="text/javascript">
function detectPlugin(sID)
{
var bComInstalled = info.isComponentInstalled(sID, "ComponentID");
if (bComInstalled)
{
return "已安装。版本号:" + info.getComponentVersion(sID, "ComponentID");
}
else
{
return "未安装.";
}
}

alert("Flash插件" + detectPlugin("{D27CDB6E-AE6D-11CF-96B8-444553540000}"));

/*
ClassID list

{CFCDAA03-8BE4-11CF-B84B-0020AFBBCCFA} RealMedia
{6BF52A52-394A-11D3-B153-00C04F79FAA6} WindowsMedia version >=7
{22D6F312-B0F6-11D0-94AB-0080C74C7E95} WindowsMedia version 6.4
{02BF25D5-8C17-4B23-BC80-D3488ABDDC6B} QuickTime
{D27CDB6E-AE6D-11CF-96B8-444553540000} Flash
*/

</script>

这样虽然能够检测出大部分的常见插件,但是一些第三方插件,这种方法好像是不可行的。
msdn上有这么一句话:Only Microsoft Internet Explorer components are detected by this method. If a component identifier of a third-party component is specified, the method returns false.

我尝试了如下的方法:

<div id="info" style="display:none"></div>

<script type="text/javascript">
function detectPlugin(sID)
{
var pVersion;
info.innerHTML = '<object id="webCtrl" classid="CLSID:'+ sID +'"></object>';
try
{
pVersion = webCtrl.getVersion(); //控件内自己定义的一个返回版本号的方法
//return "v:" + pVersion;
return true;
}
catch (e)
{
return false;
}
}
</script>

这样虽然基本满足了我的要求,不过老是觉得这种方法走了弯路。最近的项目里用到这个,不知道各位有什么更好的方法,望不吝赐教。
0

评论Comments