Firefox 拡張機能で読み取られて実行される JavaScript スクリプトをデバッグしようとしています。Firebug コンソールを介してのみエラーを確認でき (私のコードは Firebug には表示されません)、「終了していない文字列リテラル」が報告されています。
行とその周りの行を確認したところ、括弧、中括弧、引用符のバランスが取れているなど、すべてがうまくいっているようです。他に考えられる原因は何ですか?
Firefox 拡張機能で読み取られて実行される JavaScript スクリプトをデバッグしようとしています。Firebug コンソールを介してのみエラーを確認でき (私のコードは Firebug には表示されません)、「終了していない文字列リテラル」が報告されています。
行とその周りの行を確認したところ、括弧、中括弧、引用符のバランスが取れているなど、すべてがうまくいっているようです。他に考えられる原因は何ですか?
ほとんどのブラウザーでは、次のようなコードで問題が発生するようです。
var foo = "</script>";
Firefox、Opera、および IE8 では、これにより、未終了の文字列リテラル エラーが発生します。スクリプトを含む html コードをシリアライズするときはかなり面倒です。
改行を探してください!これらが原因であることが多いです。
「評判」があれば、jamtodayの回答に投票します
あなたのデータがPHP経由で来ている場合、これは役立つかもしれません
$str = str_replace(array("\r", "\n"), '', $str);
"<\/script>"
と同様に機能するように見えることを発見しました"</scr"+"ipt>"
。
タグクロージャをエスケープするか、ASCIIコードを使用するだけです
すなわち
<\/script>
すなわち
</script>
JSLintを介してスクリプトを実行してみてください。
サーバー側のコードによって挿入される可能性がある、エスケープされていない単一の qoute を含む文字列を探します。
カット/ペーストを実行した場合:一部のオンライン構文ハイライターは、一重引用符と二重引用符をマングルし、フォーマットされた引用符のペア(開始と終了のペアが一致)に変換します。(現在、例が見つかりません)...コマンド-+を数回押して、引用文字を凝視する必要があります
別のフォントを試してみませんか? また、さまざまなエディターとIDEがさまざまなトークナイザーとハイライトルールを使用します。JSは解析する動的言語の1つなので、ファイルをemacs、vim、gedit(JSプラグインを使用)で開いてみてください...運が良ければ、ファイルの終わりまで続く長い紫色の文字列が表示されます。
スラッシュ(/)をエスケープしましたか?私は前にそれらと問題を抱えていました
過去に、通常は Word からのコピー アンド ペーストで、斜めの引用符 ( ' ) に問題がありました。それらを通常の一重引用符 ( ' ) に置き換えるとうまくいきます。
何も役に立たない場合は、次のようなユニコード文字を探します
\u2028
これにより、文字列が複数の行で壊れ、このエラーがスローされる可能性があります
おそらく、PHP コードに改行があるためです。アラート ウィンドウ メッセージに改行が必要な場合は、PHP コードの各行の末尾にエスケープ構文として含めます。私は通常、次の方法でそれを行います。
$message = 'line 1.\\n';
$message .= 'line 2.';
また、%0A はエンコードされた改行文字の URL であることに注意してください。問題のあるコードのどこに改行があるかを見つけるのにしばらく時間がかかりました。
Chromebugを試しましたか? 拡張機能の Firebug です。
エラー メッセージに示されている行番号の前にあるコードをスキャンします。終了していないものは何でも、下流の何か (非難された行番号) にフラグが立てられます。
「二分探索」を試してみてください。コードの半分を削除して、もう一度やり直してください。それでもエラーが発生する場合は、残りのコードの半分を削除します。エラーがない場合は、削除したものを元に戻し、その半分を削除します。繰り返す。
かなり迅速に数行に絞り込めるはずです。私の経験では、この時点で、愚かな不正な文字列に気付くでしょう。
エラーが発生しているサーバー側のリソースがわからない場合は、ブラウザーに保存されたバージョンの HTML 出力に対してこれを実行すると便利な場合があります。
Web ページの開発者は、閲覧者のブラウザで使用されているエンコーディングについて間違った推測をしました。これは通常、ページのヘッダーにエンコーディングを指定することで解決できます。
空白は私が見つけた別の問題であり、このエラーを引き起こします。関数を使用して空白をトリミングすると役立つ場合があります。
str = str_replace(array("\r\n","\n\r","\r", "\n"), '<br />', stripslashes($str));
これはうまくいくはずです。