2017-07-16 101 views
0

最近我試圖從javascript中使用mshta獲得一個快速警報框,但我注意到一些奇怪的東西,而且我沒有ideea是什麼問題。這一點,在某種程度上,我一直在努力實現:未終止的字符串常量-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運行。

+0

命令行中的反斜槓並不像JS中的轉義字符。在字符串中使用單引號。 – Teemu

回答

1

我也有我的工作的命令的版本開始,我會解釋爲什麼它的工作原理:

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

相關問題