2

JavaScript と hta ファイルを使用してテキスト ファイルを作成しようとすると、この非常に奇妙な問題が発生します。

これは、その基本に分解されたコードです。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script>

alert("creating file");
var fso = new ActiveXObject("Scripting.FileSystemObject");
var s = fso.CreateTextFile("test.txt", true);
s.WriteLine("it works");
s.Close();
alert("file created");
</script>
</head>

<body>
</body>
</html>

これは、「Untitled.hta」という名前の hta ファイルにあります。[アプリケーションから開く] > [既定のプログラムを選択] を [Microsoft (R) HTML Application Host] に設定し、hta ファイルを開くと、テキスト ファイルが正常に作成されます。

しかし、Open With > Choose Default Program を "Notepad" に設定し、次に Open With "Microsoft (R) HTML Application Host" に設定すると、テキスト ファイルが作成されません。

なぜこれが起こっているのか誰にも分かりますか?通常は問題になりませんが、クライアントの hta ファイルがデフォルトでメモ帳として開くように設定されている場合、hta ファイルは意図したとおりに機能しません。

物事をさらに複雑にするには

var s = fso.CreateTextFile("test.txt", true);

var s = fso.CreateTextFile("TestFolder/test.txt", true);

htaファイルが配置されている場所に、「TestFolder」というフォルダーを作成します

以前と同じことを行うと、デフォルトとしてメモ帳に設定すると、Path not found エラーが発生します (ただし、デフォルトが Microsoft (R) HTML Application Host に設定されている場合は正常に動作します)。

4

1 に答える 1

2

これは、相対パスを使用しているためです。FSO を作成する前に、次のスニペットを配置します。

var shell = new ActiveXObject("WScript.Shell");
alert(shell.currentDirectory);

おそらく、HTA アラートC:\Windows\System32(使用している OS によって異なります)。これは、見つけることができるフォルダーですtest.txt。また、「Path not found」エラーについて説明しました...

この問題を解決するには、絶対パスのみを使用するか、現在のディレクトリを設定します。

shell.currentDirectory = 'C:/Some_Path';
于 2013-02-07T05:31:06.480 に答える