Question

    

Cette question a déjà une réponse ici:

         

J'essaie de déboguer un script JavaScript qui est lu et exécuté dans une extension Firefox. Je ne peux voir que des erreurs via la console Firebug (mon code est invisible pour Firebug), et il signale un & "; Littéral chaîne non terminé. &";

J'ai vérifié la ligne et les lignes qui l'entourent et tout semble parfait: les parenthèses, les accolades et les guillemets sont équilibrés, etc. Quelles sont les autres causes possibles que je devrais rechercher?

Était-ce utile?

La solution

La plupart des navigateurs semblent avoir des problèmes avec le code suivant:

var foo = "</script>";

Sous Firefox, Opera et IE8, il en résulte 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.

Autres conseils

Recherchez les sauts de ligne! Ce 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 vous 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 à la fermeture de vos tags ou utilisez du code ASCII

c'est-à-dire

<\/script>

c'est-à-dire

<&#47;script>

Si vous avez déjà coupé / collé: certains surligneurs de syntaxe en ligne vont modifier les guillemets simples et doubles, en les transformant en paires de guillemets formatées (paires d’ouverture et de fermeture correspondantes). (Bien que je ne trouve aucun exemple pour le moment) ... Cela implique donc d'appuyer sur Command- + quelques fois et de regarder vos caractères de citation

Essayez une police différente? , 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, essayez donc d’ouvrir le fichier dans emacs, vim, gedit (avec les plugins JS) ... Si vous avez de la chance, l’un d’eux affichera une longue chaîne violette se prolongeant jusqu’à la fin de fichier.

Recherchez une chaîne contenant un guillemet simple non échappé pouvant être inséré par un code côté serveur.

Avez-vous échappé à vos barres obliques (/)? J'ai eu des problèmes avec ceux avant

Avez-vous essayé Chromebug ? C'est le Firebug pour les extensions.

J'ai eu des problèmes avec les guillemets inclinés dans le passé (& # 8216;) généralement en copiant-collant à partir de Word. Les remplacer par des guillemets simples (') fait l'affaire.

N'oubliez pas non plus que% 0A est l'URL du caractère de saut de ligne codée. Il m'a fallu un moment pour trouver où il y avait un saut de ligne dans mon code fautif.

Si rien ne vous aide, recherchez des caractères de code unique tels que

.
\u2028

cela peut casser votre chaîne sur plusieurs lignes et générer cette erreur

C'est peut-être parce que vous avez un saut de ligne dans votre code PHP. Si vous avez besoin de sauts de ligne dans votre message de la fenêtre d'alerte, incluez-le en tant que syntaxe avec un caractère d'échappement à la fin de chaque ligne de votre code PHP. Je le fais habituellement de la manière suivante:

$message = 'line 1.\\n';
$message .= 'line 2.';

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 présente, remettez ce que vous avez supprimé et supprimez la moitié de celle-ci. Répéter.

Vous devriez pouvoir réduire le nombre de lignes assez rapidement. Mon expérience a été qu’à ce stade, vous remarquerez une chaîne malformée stupide.

Il peut être utile 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 compris quel encodage est utilisé par le navigateur du visualiseur. Cela peut généralement être résolu en spécifiant un codage dans l'en-tête de la page.

Scannez le code fourni avant la ligne indiquée par le message d'erreur. Tout ce qui n'est pas terminé a abouti à quelque chose en aval (la ligne blâmée #) à marquer.

L'espace est un autre problème que je trouve, provoque cette erreur. Utiliser une fonction pour réduire les espaces peut aider.

$ str = str_replace (array (& "; \ r \ n &"; & "\ n \ r &"; & "\ r " ;, " \ n "), '
', stripslashes ($ str));

Cela devrait fonctionner.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top