Výběr adresáře a JavaScript
Programujeme-li aplikaci pro intranet, nebo poslední dobou oblíbené WWW rozhraní ke klientskému programu či lépe službě, bývá poměrně často se opakující úlohou výběr adresáře na lokálním disku. V tomto článku si ukážeme, jak lze takový výběr zrealizovat pomocí JavaScriptu a technologie Windows Scripting Host.
Jako vždy je k nahlédnutí připravena malá ukázka. Po otevření nového okna s ukázkou můžete procházet adresáře (složky) na svém lokálním disku C:, přičemž skript zobrazuje celou cestu k aktuálně vybranému adresáři a všechny jeho podadresáře. Pro korektní funkci je zapotřebí prohlížeč Microsoft Internet Explorer verze aspoň 4 (příklad byl testován na verzi 5.5) se zapnutými ovládacími prvky ActiveX. Dále musí být v klientském počítači nainstalovány knihovny Windows Scripting Host. (Pokud používáte některý z modernějších antivirů nebo osobní firewall, je nutné povolit provádění skriptu.) Po stisku tlačítka „Vybrat“ dojde k odeslání formuláře, obsahujícího ve skrytém poli path
aktuálně vybraný adresář včetně celé cesty (v ukázce je místo toho pouze zobrazeno informační okno).
Popis kódu
V hlavičce stránky získáme z parametrů stránky aktuální cestu, kterou máme zobrazit, a uložíme ji do pomocné proměnné path
. Pokud je stránka volána bez parametrů, nastavuje se zde výchozí cesta, kterou je v tomto případě C:
. Do další pomocné proměnné je uložena „čistá“ adresa stránky bez parametrů, kterou použijeme při vytváření URL odkazů:
var path = location.search;
if (path==““)
path = „C:“;
else
path = unescape(path.substring(1));
var strLoc = location.href;
var ii;
if( (ii=strLoc.indexOf(„?“)) != -1 ) strLoc=strLoc.slice(0,ii);
Tělo stránky obsahuje formulář, určený pro odeslání výsledků. Do jeho skrytého pole JavaScriptem doplníme aktuální cestu, tedy aktuální hodnotu proměnné path
. Tuto hodnotu rovněž zobrazíme „přímo do stránky“. Celý kód (mix HTML a JavaScriptu) může mít třeba tuto podobu:
<form>
<p><b>Aktuální adresář:</b>
<script language=“JavaScript“>
<!———
document.write(„<input type=’hidden‘ name=’path‘ value='“+path+“‚>“);
document.write(path);
//——–>
</script>
<input type=“submit“ value=“Vybrat“ name=“s“>
</p>
</form>
Poslední částí kódu je výpis aktuální cesty a podadresářů. Nejprve vytvoříme pomocnou funkci WriteFolder
, která dle zadaných parametrů vypisuje jeden řádek výstupu s obrázkem, částí adresářové cesty a odkazem:
function WriteFolder ( p, theUrl, theOffset, fOpen ) {
for( j=0; j<theOffset; j++) document.write(„ “);
document.write( „<img src='“+(fOpen?“disktree_folderopen“:“disktree_folderclosed“)+“.gif‘> <a href='“+strLoc+“?“+escape(theUrl)+“‚>“ + p + „</a><br>“ );
}
Cestu k zobrazenému adresáři (je stále ještě uložena v proměnné path
) v následující nevzhledné smyčce rozdělíme na jednotlivé části (oddělovačem jsou zpětná lomítka) a každou z nich vypíšeme na samostatný řádek s využitím funkce WriteFolder
:
var ii, strActiveFolder;
var pp = path;
var xoff = 0;
var url = „“;
while( (ii=pp.indexOf(„\\“)) != -1 ) {
strActiveFolder = pp.substring(0,ii);
url += strActiveFolder;
WriteFolder( strActiveFolder, url, xoff, true );
url += „\\“;
pp = pp.substring(ii+1);
xoff++;
}
url += pp;
WriteFolder( pp, url, xoff, true );
xoff++;
Naposledy pak následuje výpis podadresářů aktuálního adresáře. Je to jediná – ač nejdůležitější – část celého kódu, v níž je využito technologie Windows Scripting Host, konkrétně ActiveX objektu FileSystemObject. Podmínka na třetím řádku ošetřuje správné zadání kořenového adresáře do metody GetFolder
. Co se vlastně v následujícím kódu děje, je poměrně zřejmé z názvů použitých metod. Jedinou „zvláštností“ je snad použití objektu Enumerator
. Tento objekt je v podstatě zprostředkovatelem, který umožňuje přístup k jednotlivým členům kolekce, v tomto případě kolekce podsložek Folders
, vrácené metodou SubFolders
. Microsoft sice v dokumentaci doporučuje stručnější přístup ke členům kolekce pomocí syntaxe for...in
, ten však vykazoval při testech menší stabilitu a vyšší chybovost.
var fs, f, path2;
fs = new ActiveXObject(„Scripting.FileSystemObject“);
if( path.length == 2 ) path2 = path + „\\“; else path2 = path;
f = fs.GetFolder(path2);
var subfc = new Enumerator(f.SubFolders);
for(; !subfc.atEnd(); subfc.moveNext()) {
WriteFolder( subfc.item().Name, path + „\\“ + subfc.item().Name , xoff, false );
}
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Fandíme českým sportovcům a rozdáváme hosting ZDARMA!
26. července 2024 -
Zvýšení výkonu WiFi signálu: Jak a proč používat WiFi zesilovače
28. června 2023 -
Výkonný a kompaktní: ASOME Max Studio s výjimečným poměrem cena/výkon
11. listopadu 2024
Nejnovější
-
Výkonný a kompaktní: ASOME Max Studio s výjimečným poměrem cena/výkon
11. listopadu 2024 -
Šokující data od Microsoftu: Kyberútoky rostou o stovky procent!
8. listopadu 2024 -
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024 -
OpenAI představilo novou funkci ChatGPT Search
6. listopadu 2024