2017-07-16 7 views
0

最近、私はmshtaを使ってjavascriptから迅速な警告ボックスを取得しようとしていましたが、何か変わったことに気がつきました。これは私が達成しようとしていたものを、方法で、次のとおりです。終結していない文字列定数-mshta:javascript

mshta javascript:alert("The file was stored here:\"C:\\folder_with_space_ _.txt"); 

それが与えるエラーがこのポスト(CHAR 57)のタイトルの1である.Iは、物事の組み合わせを試してみました:

//code that works: 
mshta javascript:alert("The file was stored here:\"sdadasd"); 
mshta javascript:alert("The file was stored here:\"\" sdadasd"); 

//error-notice the space;error on char 35 
mshta javascript:alert("The file was stored here:\" sdasds"); 

それは二重引用符の数が奇数の場合、それはエラーを与えているように見えますが、:

//error 
mshta javascript:alert("The file was stored here:\" \"sdadasd"); 

私は、ブラウザのコンソールで同じことを実行しようとしましたし、それが働きました。私は何らかのパーサエラーと考えています。私はそれを修正できますか?(私はfromCharCodeを使用して二重引用符を直接挿入することを考えています)。

注::コマンドはcmdから実行されました。

+0

コマンドラインのバックスラッシュは、JSの場合のようにエスケープ文字ではありません。文字列の中に一重引用符を使用します。 – Teemu

答えて

1

私が動作するようになったコマンドのバージョンから始めましょう、そしてそれが動作する理由私が説明しましょう:

mshta "javascript:alert('The file was stored here:\x22C:\\folder_with_space_ _.txt');" 

最初そしておそらく最も重要な点は、私たちが渡しているということですmshta.exe(実行するJavaScriptコマンド)に1つの引数を渡すので、その引数全体を二重引用符で囲む必要があります。これにより、スペースが引数区切り文字として扱われることを防ぎます。

2番目の点は、実際のJavaScriptコマンドの中で二重引用符を使用する方法がないようです。質問Escaping Double Quotes in Batch Scriptによれば、cmdの二重引用符の中に二重引用符をエスケープする標準はありません。どうやら、mshta.exeは""または\"(または少なくとも私は動作させることができませんでした)を尊重しません。私は、Teemuの提案をコメントに引用して、JavaScriptコードの文字列区切り文字に対してのみ単一引用符を使用することをお勧めします。文字列の中に二重引用符を含める場合は、16進数のリテラル\x22を使用します。

関連する問題