Pergunta

Esta questão já tem uma resposta aqui:

Eu estou tentando depurar um JavaScript script que é lido em uma extensão do Firefox e executado. Só posso ver erros por meio do console do Firebug (meu código é invisível para Firebug), e está relatando um "literal string não terminada."

Eu verifiquei a linha e as linhas ao redor dele e tudo parece bem-parênteses, chaves, e as citações são equilibradas, etc. Quais são outras possíveis causas que eu deveria estar procurando?

Foi útil?

Solução

A maioria dos navegadores parecem ter problemas com o código como este:

var foo = "</script>";

No Firefox, Opera e IE8 Isso resulta em uma string de erro literal não terminada. Pode ser bastante desagradável quando a serialização de código html que inclui scripts.

Outras dicas

Procure quebras de linha! Aqueles são frequentemente a causa.

Eu votaria pela resposta de jamtoday se eu tivesse a "reputação"

Se os seus dados está vindo por meio de PHP, isso pode ajudar

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

Eu só descobri que "<\/script>" parece trabalho, bem como "</scr"+"ipt>".

Você pode tentar executar o script através JSLint .

Apenas escapar de seu fechamento de tag ou usar o código ASCII

ie

<\/script>

ie

<&#47;script>

Caso você tenha feito qualquer corte / colar: alguns marcadores de sintaxe on-line vai mangle aspas simples e duplas, transformando-os em pares cotação formatados (abertura combinados e pares de fechamento). (Tho eu não posso encontrar qualquer exemplos agora) ... De modo que implica que batem Command + algumas vezes e olhando para os seus caracteres de citação

Tente uma fonte diferente ? também, diferentes editores e IDEs usar diferentes tokenizers e regras destaque e JS é um dos mais linguagens dinâmicas para analisar, de modo a tentar abrir o arquivo no emacs, vim, gedit (com plugins JS) ... Se você tiver sorte, um deles irá mostrar uma cadeia longa roxo correndo até o final de Arquivo.

Procure uma string que contém um aspas simples unescaped que pode ser inserido por algum código do lado do servidor.

Você escapou suas barras (/)? Eu tive problemas com aqueles antes

Você já tentou Chromebug ? É o Firebug para extensões.

Eu tive problemas com aspas angulares no passado ( ‘), geralmente de copiar e colar a partir do Word. Substituí-los com aspas simples regulares ( ') faz o truque.

Além disso, mantenha em mente que% 0A é o URL de caracteres de avanço de linha codificado. Levei algum tempo para encontrar onde houve um avanço de linha no meu código incorreto.

Se nada ajuda, olhar para alguns caracteres de código de uni como

\u2028

isso pode quebrar sua seqüência em mais de uma linha e jogue este erro

Talvez seja porque você tem uma quebra de linha no seu código PHP. Se você precisa de quebras de linha em sua mensagem janela de alerta, incluí-lo como uma sintaxe escapou no final de cada linha em seu código PHP. Eu costumo fazê-lo da seguinte maneira:

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

Tente uma "pesquisa binária". Excluir metade do código e tente novamente. Se o erro ainda está lá, excluir metade do código restante. Se o erro não está lá, colocar o que você excluiu de volta, e metade de exclusão desse. Repetir.

Você deve ser capaz de reduzi-lo a uma linha poucos rapidamente. Minha experiência tem sido que, neste ponto, você vai notar algumas cadeia mal formada estúpido.

Pode ser conveniente para realizar isso em uma versão salva a saída HTML para o navegador, se você não tiver certeza de qual recurso do lado do servidor o erro está.

O desenvolvedor de página web adivinhou errado sobre qual a codificação é utilizado pelo navegador do espectador. Isto normalmente pode ser resolvido através da especificação de uma codificação no cabeçalho da página.

Verificar o código que vem antes na linha # mencionado por mensagem de erro. Tudo o que é unterminated resultou em algo jusante, (a linha culpou #), a ser marcada.

Whitespace é outra questão que eu encontrar, faz com que este erro. Usando uma função para aparar o espaço em branco pode ajudar.

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

Isso deve funcionar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top