J'essaie de déboguer un script JavaScript qui est lu dans une extension Firefox et exécuté. Je ne peux voir que les erreurs via la console Firebug (mon code est invisible pour Firebug), et il signale un "littéral de chaîne non terminé".
J'ai vérifié la ligne et les lignes qui l'entourent et tout semble bien entre parenthèses, accolades et guillemets sont équilibrés, etc. Quelles sont les autres causes possibles que je devrais rechercher?
La plupart des navigateurs semblent avoir des problèmes avec du code comme celui-ci:
var foo = "</script>";
Dans Firefox, Opera et IE8, cela entraîne une erreur littérale de chaîne non terminée. Peut être assez désagréable lors de la sérialisation du code html qui inclut des scripts.
Recherchez les sauts de ligne! Telles sont souvent la cause.
Je voterais pour la réponse de jamtoday si j'avais la "réputation"
Si vos données proviennent de PHP, cela pourrait aider
$str = str_replace(array("\r", "\n"), '', $str);
Je viens de découvrir que "<\/script>"
semble fonctionner aussi bien que "</scr"+"ipt>"
.
Vous pouvez essayer d'exécuter le script via JSLint .
Échappez simplement à vos fermetures de balises ou utilisez le code ascii
c'est à dire
<\/script>
c'est à dire
</script>
Recherchez une chaîne qui contient un guillemet simple non échappé qui peut être inséré par un code côté serveur.
Si vous avez fait un copier/coller: certains surligneurs de syntaxe en ligne modifient les guillemets simples et doubles, les transformant en paires de guillemets formatées (paires d'ouverture et de fermeture correspondantes). (je ne peux pas trouver d'exemples pour le moment) ... Donc, cela implique d'appuyer plusieurs fois sur Command- + et de regarder vos caractères de citation
Essayez une police différente? également, différents éditeurs et IDE utilisent différents tokenizers et règles de surbrillance, et JS est l'un des langages les plus dynamiques à analyser, alors essayez d'ouvrir le fichier dans emacs, vim, gedit (avec JS plugins) ... Si vous avez de la chance, l'un d'eux montrera une longue chaîne violette passant par la fin du fichier.
Si rien ne vous aide, recherchez des caractères uni-code comme
\u2028
cela peut casser votre chaîne sur plusieurs lignes et générer cette erreur
J'ai eu des problèmes avec les citations inclinées dans le passé (‘), généralement à partir de copier-coller à partir de Word. Les remplacer par des guillemets simples réguliers (') fait l'affaire.
Gardez également à l'esprit que% 0A est l'URL du caractère de saut de ligne codé. Il m'a fallu un certain temps pour trouver où il y avait un saut de ligne dans mon code incriminé.
Avez-vous échappé à vos barres obliques (/)? J'ai déjà eu des problèmes avec ça
C'est peut-être parce que vous avez un saut de ligne dans votre PHP. Si vous avez besoin de sauts de ligne dans votre message de fenêtre d'alerte, incluez-le en tant que syntaxe d'échappement à la fin de chaque ligne dans votre PHP code. Je le fais généralement de la manière suivante:
$message = 'line 1.\\n';
$message .= 'line 2.';
Avez-vous essayé Chromebug ? C'est le Firebug pour les extensions.
Scannez le code qui vient avant la ligne # mentionnée par le message d'erreur. Tout ce qui n'est pas terminé a entraîné le signalement de quelque chose en aval (la ligne blâmée #).
Essayez une "recherche binaire". Supprimez la moitié du code et réessayez. Si l'erreur persiste, supprimez la moitié du code restant. Si l'erreur n'est pas là, remettez ce que vous avez supprimé et supprimez la moitié de cela. Répéter.
Vous devriez pouvoir le réduire à quelques lignes assez rapidement. Mon expérience a été qu'à ce stade, vous remarquerez une stupide chaîne mal formée.
Il peut être judicieux d'effectuer cette opération sur une version enregistrée de la sortie HTML vers le navigateur, si vous n'êtes pas sûr de la ressource côté serveur dans laquelle l'erreur se trouve.
Le développeur de la page Web a mal deviné quel encodage est utilisé par le navigateur du spectateur. Cela peut généralement être résolu en spécifiant un encodage dans l'en-tête de la page.
L'espace est un autre problème que je trouve, provoque cette erreur. L'utilisation d'une fonction pour rogner l'espace blanc peut être utile.