未终止的字符串常量-mshta:javascript

时间:2017-07-16 19:52:21

标签: javascript hta

最近我试图使用mshta从javascript中获取一个快速警报框,但我注意到一些奇怪的东西,我不知道问题是什么。从某种程度上说,这是我想要实现的目标:

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

它给出的错误是这篇文章的标题中的一个(字符57)。我尝试了以下各项的组合:

//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运行的。

1 个答案:

答案 0 :(得分:3)

我将从我开始工作的命令版本开始,然后我将解释它的工作原理:

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

第一个也许是最重要的一点是我们将一个参数传递给mshta.exe(要执行的JavaScript命令),因此我们应该用双引号括起整个参数。这可以防止将空间视为参数分隔符。

第二点是,似乎没有一种方法可以在实际的JavaScript命令中使用双引号。根据问题Escaping Double Quotes in Batch Script,没有标准可以在cmd的双引号内转义双引号。显然,mshta.exe并不尊重""\"(或者至少,我无法让它们工作)。我建议在评论中遵循Teemu的建议,并在JavaScript代码中仅使用单引号作为字符串分隔符。如果在字符串中要包含双引号字符,请使用十六进制文字\x22

相关问题