- 締切済み
html組込み時のカレントフォルダについて
本日、初めてjavascriptにチャレンジしました。 カレントフォルダについて、わからないため教えてください。 ■D:/data/にtest.html,test.jsを作成 ■test.html内にtest.jsを組み込み ■test.jsに下記を記載 var fso = new ActiveXObject("Scripting.FileSystemObject"); var myFolder = fso.GetFolder("."); var myFiles = new Enumerator(myFolder.Files); while(!myFiles.atEnd()){ document.write(myFiles.item()); myFiles.moveNext(); } D:/data/内のファイル一覧を表示させたかったのですが、 結果は、デスクトップのファイル一覧が表示されました。 fso.GetFolder(".")でカレントフォルダを指定していますが、 この定義はどうなっているのでしょうか? 不慣れなため、質問の仕方も簡潔でなくすみません。 宜しくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- pick52
- ベストアンサー率35% (166/466)
> → htmlファイルはローカル上のファイルで、IE6でファイルオープンしています。IIS等のHTTPサーバ(?)は動作していません。 よく調べてみると、ブラウザの実行ファイルのパスがカレントになる ようですね。 (IEの場合はなぜか %ProgramFiles%\Internet Explorer\iexplore.exe ではなくデスクトップになるようです) こちらでテストしたのがたまたま偶然、IEではないIEコンポブラウザで 実行ファイルのある場所にテストファイル作っていたため気がつか なかったようです。 すみません。 これはJScript側の仕様と見るしかないと思います。 スクリプトファイルのあるディレクトリを取得する方法がないかと 調べてみたのですが、ないようですね。 (WScriptオブジェクトにScriptFullNameというのがあるようなのですが WScriptオブジェクトを取得する方法が分からない...) パスが固定なら直書きするしかないでしょうね。 パスが固定でない場合はそのたび書き換えるとかかな。
- pick52
- ベストアンサー率35% (166/466)
No1です。あれからよく考えてみたらサーバ経由で見ているならこの 結果は当然でした。 Scripting.FileSystemObjectはローカルのファイルを操作するもの なのでそのスクリプトを呼び出しているHTMLがローカル上になければ 期待した通りの動作はしません。 http://localhost/test.html ↓ ローカルのカレントディレクトリは不明(環境によって異なる可能性も) C:\Documents and Settings\hogehoge\My Documents\test.html ↓ C:\Documents and Settings\hogehoge\My Documents がカレント ディレクトリ もし、サーバのディレクトリにあるファイル一覧を取得したいので あれば、JavaScriptなどのクライアントサイドスクリプティング技術 では不可能なのでCGIやPHPなどのサーバサイドスクリプティング技術を 使用してください。
お礼
pick52さん アドバイスをいただきまして、ありがとうございます。 >正確にはJavaScriptではなくJScriptでは? → 知識不足ですみません。参考URLで確認させていただきました。 >組み込みというのはscriptタグで外部読み込みしているということ >でしょうか。 → はい。そのとおりです。 >var fso = new ActiveXObject('Scripting.FileSystemObject'); >var myFolder = fso.GetFolder('.'); >alert(myFolder.path); > >として調べてみてください。 → デスクトップのパスが表示されました。 >Scripting.FileSystemObjectはローカルのファイルを操作するもの >なのでそのスクリプトを呼び出しているHTMLがローカル上になければ >期待した通りの動作はしません。 → htmlファイルはローカル上のファイルで、IE6でファイルオープンしています。IIS等のHTTPサーバ(?)は動作していません。
- pick52
- ベストアンサー率35% (166/466)
まず、これはScripting.FileSystemObjectなどを使用しているので 正確にはJavaScriptではなくJScriptでは? また、Windows版IE以外で動作するかどうかも分かりません。 (JavaScriptとJScriptの違いなどは参考URLを見たり自分で調べて ください) 組み込みというのはscriptタグで外部読み込みしているということ でしょうか。 こちらでローカルにて試した限りでは正常にカレントディレクトリが 表示されましたが...。 環境などが書いてありませんがもしかするとカレントディレクトリが デスクトップになっているのでは。 IISなどのサーバを使用している場合は可能性があります。 (IISはデフォルトのカレントディレクトリが実行したファイルの ディレクトリにならないことが多い) var fso = new ActiveXObject('Scripting.FileSystemObject'); var myFolder = fso.GetFolder('.'); alert(myFolder.path); として調べてみてください。 カレントディレクトリは var objWshShell = new ActiveXObject("WScript.Shell"); objWshShell.CurrentDirectory = 'ディレクトリ'; で変更できます。
お礼
pick52さん ご回答、ありがとうございます。 おかげさまで、カレントパスがデスクトップになる理由がわかりました。 スクリプトファイルのあるディレクトリを取得する方法については、 私も引き続き検討したいと思います。 ありがとうございました。