昨天弄了一天“扫描U盘是否连接到电脑”的功能,折腾了一天出了个java版和js版,这里记录下JS版本。
先说说思路:从浏览器的地址栏打开网页之后,通过onload事件调用ActiveXObject判断U盘是否连接到电脑,若是连接了获取信息显示到table中,若是没有每隔2秒调用一次事件进行获取,获取到之后清空计时器并将U盘信息显示到页面。PS:全程只获取一个U盘的信息。
1、页面基本结构:
<body οnlοad="checkDisk();">
<table width="100%" border="0" cellspacing="0" cellpadding="0" class="ztb_l" id="upanTable">
<tr>
<td>盘符路径(Path)</td>
<td>文件系统类型(FileSystem)</td>
<td>驱动器类型(DriveType)</td>
<td>驱动器对象的字母(DriveLetter)</td>
<td>驱动器是否准备好或是否损坏(IsReady)</td>
<td>卷标名(VolumeName)</td>
<td>驱动器对象的跟文件夹(RootFolder)</td>
<td>可用容量大小(AvailableSpace)</td>
<td>总空间容量大小(TotalSize)</td>
</tr>
</table>
</body>
2、JS查询:
var tt = 2 *1000;//2秒扫描一次
var interval=null;
/**
* 该方法用来检测U盘是否存在,若是存在则显示在页面中,若是不存在则扫描识别直至电脑连接上U盘
* @param flag:1-移动磁盘 2-本地磁盘 非1和2其他磁盘信息,若有多个磁盘页面只显示一个磁盘信息
*/
function checkDisk(){
//diskArr = getDiskInfo(3,1);//查询所有磁盘信息并返回结果集
diskArr = getDiskInfo(1,1);//查询所有可移动磁盘信息并返回结果集
if(diskArr.length>0){//说明连接了U盘
//appendDiskInfoToTable(diskArr);//显示全部
appendDiskInfoToTable(diskArr[0]);//取其中一个显示到页面
/*
var x = diskArr[0];
var diskInfo=x.Path+"\n"+x.FileSystem+"\n"+x.DriveType+"\n"+x.DriveLetter+"\n"
+x.IsReady+"\n"+x.VolumeName+"\n"+x.RootFolder+"\n"+getDiskSpace(x.AvailableSpace,1,2)+"\n"
+getDiskSpace(x.TotalSize,1,2);
alert(diskInfo);
*/
}else{//没有连接,那么循环查找并直接将结果显示到页面
interval = window.setInterval("getDiskInfo(1,3)",tt);//重复加载
}
}
/**
* 该方法用来获取所有磁盘的基本信息
* @param flag:获取的磁盘类型信息:1-获取可移动磁盘信息 2-获取本地磁盘信息 默认获取所有磁盘信息
* @param result:处理结果 1-返回结果集 2-直接将所有结果集显示到页面上 3-将第一个结果集显示到页面上
* @return array:集合
* */
function getDiskInfo(flag,result){
var diskArr=new Array();//初始化
if(flag==null || flag==undefined) flag=3;
if(result==null || result==undefined) result=1;//默认返回结果
var e, x;
var fso = new ActiveXObject("Scripting.FileSystemObject");
var bfResult = false;
e = new Enumerator(fso.Drives);
flag = parseInt(flag,10);
result = parseInt(result,10);
for (; !e.atEnd(); e.moveNext()) {
x = e.item();// 获取每个盘符的基本信息
switch(flag){
case 1:{//移动磁盘
if(x.DriveType==1){
diskArr.push(x);
}
break;
}
case 2:{//获取本地磁盘
if(x.DriveType==2){//固定磁盘
diskArr.push(x);
}
break;
}
default:{//全部磁盘
diskArr.push(x);
break;
}
}
}
//处理结果
switch(result){
case 2:{//将所有结果返回到页面
if(diskArr.length>0){
clearInterval(interval);//清除计时器
appendDiskInfoToTable(diskArr);
}
break;
}
case 3:{//将第一个结果集显示到页面上
if(diskArr.length>0){
appendDiskInfoToTable(diskArr[0]);
clearInterval(interval);//清除计时器
}
break;
}
}
return diskArr;
}
/**
*获取磁盘基本信息拼接到table中
*@param diskArray:进行添加的磁盘集合
**/
function appendDiskInfoToTable(diskArray){
var tableHtml="";
if(isArray(diskArray)){//是数组
for(var i=0;i<diskArray.length;i++){
tableHtml +=addTrHtml(diskArray[i]);// 获取每个盘符的基本信息
}
}else{//不是数组
tableHtml = addTrHtml(diskArray);
}
$("#upanTable").append(tableHtml);
}
function addTrHtml(diskArray){
var trHtml="";
trHtml +="<tr>"
+"<td>"+diskArray.Path+"</td>"
+"<td>"+diskArray.FileSystem+"</td>"
+"<td>"+diskArray.DriveType+"</td>"
+"<td>"+diskArray.DriveLetter+"</td>"
+"<td>"+diskArray.IsReady+"</td>"
+"<td>"+diskArray.VolumeName+"</td>"
+"<td>"+diskArray.RootFolder+"</td>"
+"<td>"+getDiskSpace(diskArray.AvailableSpace,1,2)+"</td>"//可用空间大小(与剩余空间大小结果相同)
//+"<td>"+getDiskSpace(diskArray.FreeSpace)+"</td>"//剩余空间大小
+"<td>"+getDiskSpace(diskArray.TotalSize,1,2)+"</td>"
+"</tr>";
return trHtml;
}
/**
* 该方法用来格式化U盘显示信息
* @param space:磁盘空间容量,以byte为单位
* @param flag:1-GB 2-MB 3-KB 4-B 默认为GB
* @param fix:保留的小数位 1-###0.## 2-###0.0#
* @return 值+单位
* **/
function getDiskSpace(space,flag,fix){
var unit = getDiskUnit(flag);
var value = space/unit;
value = value.toFixed(fix)+getCell(flag);//保留位数+单位
return value;
}
/**
* 该方法用来获取单元名称
* @param flag:1-GB 2-MB 3-KB 4-B 默认为GB
* **/
function getCell(flag){
flag = parseInt(flag,10);
var cell = "GB";
switch(flag){
case 2:{
cell = "MB";;// MB
break;
}
case 3:{
cell = "KB";;// KB
break;
}
case 4:{
cell = "B";;// B
break;
}
default:
cell = "GB";;// GB
break;
}
return cell;
}
/**
* 该方法用来获取磁盘容量显示方式:1-GB 2-MB 3-KB 4-B 默认为GB
* @return 磁盘单位,如GB:1024*1024*1024 MB:1024*1024 KB为:1024 B为:1
**/
function getDiskUnit(flag){
flag = parseInt(flag,10);
var unit = 1024 * 1024 * 1024;// 将磁盘格式化为GB,默认值
switch(flag){
case 2:{
unit = 1024 * 1024;// MB
break;
}
case 3:{
unit = 1024;// KB
break;
}
case 4:{
unit = 1;// B
break;
}
default:
unit = 1024 * 1024 * 1024;// GB
break;
}
return unit;
}
/**
* 判断是不是数组
* **/
var isArray = function(obj) {
return Object.prototype.toString.call(obj) === '[object Array]';
};
3、DriverType 0-5的范围的意思:
Unknown 0 无法确定驱动器类型。
Removable 1 可移动媒体驱动器,包括软盘驱动器和其他多种存储设备。
Fixed 2 固定(不可移动)媒体驱动器,包括所有硬盘驱动器(包括可移动的硬盘驱动器)。
Remote 3 网络驱动器,包括网络上任何位置的共享驱动器。
CDROM 4 CD-ROM 驱动器,不区分只读和可读写的 CD-ROM 驱动器。
RAMDisk 5 RAM 磁盘,在本地计算机中占用一块“随机存取内存”(RAM) 虚拟为磁盘驱动器。