2011-04-19 137 views
3

我知道在Web應用程序中執行此操作時存在一些問題,但是我只是爲我自己的PC編寫自己的腳本,並且正在使用JavaScript編寫腳本。我知道,你可以通過調用獲取文件系統對象:使用javascript掃描目錄

var Fo = new ActiveXObject("Scripting.FileSystemObject") 

有沒有可以讓我瀏覽,我希望有一個特定的文件夾的方法?我以前沒有使用JavaScript,所以我不確定要查找什麼。

謝謝

編輯:我錯過了。顯然就是我使用是的JScript這是不完全一樣的東西,如JavaScript

回答

4

我想通了。一旦我知道我正在尋找JScript ...

var objShell = new ActiveXObject("Shell.Application"); 
var lib; 
lib = objShell.BrowseForFolder(0,"Select Library Folder",0); 
+0

作爲JavaScript的新手,請記住,您必須調整您的代碼到不同的瀏覽器! – clamchoda 2011-04-19 18:24:09

+1

沒有在瀏覽器中運行它,只需雙擊JScript文件在我的電腦上運行它 – JPC 2011-04-19 18:42:37

+0

尷尬,但我甚至不知道你可以做到這一點。誰是JavaScript新手現在哈哈! - 所以如果你把警報(「你好世界」);到一個.js文件,你可以雙擊文件,它會提醒你好世界? – clamchoda 2011-04-19 18:45:52

1

代碼來調用文件夾對話框

<script language="JavaScript"> 
function getFolder(){ 
    return showModalDialog("folderDialog.html","","width:400px;height:400px;resizeable:yes;"); 
} 
</SCRIPT> 
<body> 
<form> 
<input type="text" name="yourFieldName"><input type="button" value="Browse..." onclick="this.form.yourFieldName.value=getFolder()"> 

folderDialog.html

<html> 
<head> 
    <title>Browse Folders</title> 
<SCRIPT LANGUAGE="JavaScript"> 
<!-- 
var currentFolder=""; 
function GetDriveList(){ 
    var fso, obj, n, e, item, arr=[]; 
try { 
    fso = new ActiveXObject("Scripting.FileSystemObject"); 
} 
catch(er) { 
    alert('Could not load Drives. The ActiveX control could not be started.'); 
    cancelFolder(); 
} 

    e = new Enumerator(fso.Drives); 
    for(;!e.atEnd();e.moveNext()){ 
    item = e.item(); 
    obj = {letter:"",description:""}; 
    obj.letter = item.DriveLetter; 
    if (item.DriveType == 3) obj.description = item.ShareName; 
    else if (item.IsReady) obj.description = item.VolumeName; 
    else obj.description = "[Drive not ready]"; 
    arr[arr.length]=obj; 
    } 
    return(arr); 
} 
function GetSubFolderList(fld){ 
    var e, arr=[]; 
    var fso = new ActiveXObject("Scripting.FileSystemObject"); 
    var f = fso.GetFolder(fld.toString()); 
    var e = new Enumerator(f.SubFolders); 
    for(;!e.atEnd();e.moveNext()){ 
    arr[arr.length]=e.item().Name; 
    } 
    return(arr); 
} 
function loadDrives(){ 
    var drives=GetDriveList(),list=""; 
    for(var i=0;i<drives.length;i++){ 
    list+="<div onclick=\"loadList('"+drives[i].letter+':\\\\\')" class="folders" onmouseover="highlight(this)" onmouseout="unhighlight(this)">'+drives[i].letter+':\\ - '+ drives[i].description+'</div>'; 
    } 
    document.getElementById("path").innerHTML='<a href="" onclick="loadDrives();return false" title="My Computer">My Computer</a>\\'; 
    document.getElementById("list").innerHTML=list; 
    currentFolder=""; 
} 
function loadList(fld){ 
    var path="",list="",paths=fld.split("\\"); 
    var divPath=document.getElementById("path"); 
    var divList=document.getElementById("list"); 
    for(var i=0;i<paths.length-1;i++){ 
    if(i==paths.length-2){ 
     path+=paths[i]+' \\'; 
    }else{ 
     path+="<a href=\"\" onclick=\"loadList('"; 
     for(var j=0;j<i+1;j++){ 
     path+=paths[j]+"\\\\"; 
     } 
     path+='\');return false">'+paths[i]+'</a> \\ '; 
    } 
    } 
    divPath.innerHTML='<a href="" onclick="loadDrives();return false">My Computer</a> \\ '+path; 
    divPath.title="My Computer\\"+paths.toString().replace(/,/g,"\\"); 
    currentFolder=paths.toString().replace(/,/g,"\\"); 

    var subfolders=GetSubFolderList(fld); 
    for(var j=0;j<subfolders.length;j++){ 
    list+="<div onclick=\"loadList('"+(fld+subfolders[j]).replace(/\\/g,"\\\\")+'\\\\\')" onmouseover="highlight(this)" onmouseout="unhighlight(this)" title="'+subfolders[j]+'" class="folders">'+subfolders[j]+"</div>"; 
    } 
    divList.innerHTML=list; 
    resizeList(); 
    divPath.scrollIntoView(); 
} 
function resizeList(){ 
    var divList=document.getElementById("list"); 
    var divPath=document.getElementById("path"); 
    if(document.body.clientHeight>0 && divPath.offsetHeight>0){ 
    divList.style.height=document.body.clientHeight-divPath.scrollHeight; 
    } 
} 
function highlight(div){ 
    div.className="folderButton"; 
} 
function unhighlight(div){ 
    div.className="folders"; 
} 
function selectFolder(){ 
    window.returnValue=currentFolder; 
    window.close(); 
} 
function cancelFolder(){ 
    window.returnValue=""; 
    window.close(); 
} 
--> 
</SCRIPT> 
<style> 
#header{ 
    background-color: #CCCCCC; 
    border-bottom: solid 1px black; 
} 
#path{ 
    position:relative; 
    font-size: 8pt; 
    font-family: Arial; 
    font-weight: bold; 
    padding: 2px; 
} 
#list{ 
    font-size: 10pt; 
    font-family: Arial; 
    overflow:auto; 
} 
.folders{ 
    padding: 1px; 
    border-top: solid 1px white; 
    border-left: solid 1px white; 
    border-right: solid 1px white; 
    border-bottom: solid 1px black; 
    cursor: hand; 
    pointer: hand; 
    background-color: white; 
} 
.folderButton{ 
    padding: 0px; 
    border-style: outset; 
    border-width: 2px; 
    border-color:; 
    cursor: hand; 
    pointer: hand; 
    background-color: #CCCCCC; 
} 
A{ 
    color:blue; 
    text-decoration:none; 
    padding:3px; 
} 
A:hover{ 
    background-color: #CCCCCC; 
    padding:1px; 
    border-style: outset; 
    border-width: 2px; 
} 
</style> 
</head> 
<body onload="loadDrives()" onresize="resizeList()" marginwidth="0" marginheight="0" leftmargin="0" topmargin="0" scroll=no> 
<form> 
<div id="container"> 
    <table border="0" cellpadding="0" cellspacing="0" id="header"> 
    <tr> 
     <td><div id="path"></div></td> 
     <td align="right" width="1%" nowrap> 
     <input type="button" value="Select" onclick="selectFolder()"><input type="button" value="Cancel" onclick="cancelFolder()"> 
     </td> 
    </tr> 
    </table> 
    <div id="list">You must allow the ActiveX control to run in order to use this dialog.</div> 
</div> 
</form> 
</body> 
</html>