2017-07-16 1 views
0

Récemment, j'essayais d'obtenir une boîte d'alerte rapide à partir de javascript en utilisant mshta mais j'ai remarqué quelque chose d'étrange et je n'ai aucune ideea quel est le problème. Ceci est, en quelque sorte, ce que je voulais atteindre:Chaîne non terminée constant-mshta: javascript

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

L'erreur qu'il donne est celui dans le titre de ce post (char 57) .Je a essayé une combinaison de choses et:

//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"); 

on dirait qu'il est donne erreur lorsque le nombre de guillemets doubles est impair, mais:

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

J'ai essayé de faire la même chose dans une console de navigateur et cela a fonctionné. Je crois que c'est une sorte d'erreur de parser.Comment puis-je le réparer? (Je pense utiliser fromCharCode pour insérer directement le double guillemet).

Remarque: les commandes ont été exécutées à partir de cmd.

+0

Une barre oblique inverse dans la ligne de commande n'est pas un caractère d'échappement comme dans JS. Utilisez des guillemets simples dans la chaîne. – Teemu

Répondre

1

Je vais commencer avec la version de la commande que je suis arrivé à travailler, et je vais vous expliquer pourquoi cela fonctionne:

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

Le premier et peut-être le point le plus important est que nous passons un argument unique à mshta.exe (la commande JavaScript à exécuter), donc nous devrions entourer cet argument entier entre guillemets. Cela empêche l'espace d'être traité comme un délimiteur d'argument.

Le second point est qu'il ne semble pas y avoir moyen d'avoir des guillemets doubles dans les commandes JavaScript actuelles. Selon la question Escaping Double Quotes in Batch Script, il n'y a pas de standard pour l'échappement des guillemets entre guillemets pour cmd. Apparemment, mshta.exe n'honore pas "" ou \" (ou au moins, je ne pouvais pas les faire fonctionner). Je suggère de suivre la suggestion de Teemu dans les commentaires et d'utiliser des guillemets simples uniquement pour le délimiteur de chaîne dans le code JavaScript. Si, à l'intérieur d'une chaîne, vous souhaitez inclure un caractère de guillemets doubles, utilisez le littéral hexadécimal \x22.