2016-04-13 23 views
12

私はES6テンプレートリテラルを使用して文字列にHTMLを作成していますが、これまではうまくいきました。しかし、できるだけ早く私は、文字列リテラルテキスト</script>を配置しようとして、ブラウザがアップスローし、構文エラーがスローされます。ここではリテラルにスクリプトタグが含まれている場合、 "Unterminated template literal"構文エラー

SyntaxError: Unterminated template literal 

はエラーをスローし、簡単なJavaScriptのサンプルです:

var str=` 
<script> 
</script> 
` 
var pre = document.createElement('pre') 
pre.textContent = str 
document.body.appendChild(pre) 

JS Fiddleの上記のコードを参照してください。

何が起きているのかは、リテラル引用符を探して、リテラルなHTMLとして扱うようになっているようです。その時点以降のすべてのJavaScriptは間違ってHTMLとして扱われます。

私はscriptによるいかなるその他の法的HTMLタグ(とscriptyのようにも、無効なタグ)を交換する場合、それだけで正常に動作しますので、私はこれはおそらく、構文エラーまたはI奇妙な場合がいかに見ることができません私は1つの文字(例えばバックティック)をタイプしたと思うが、代わりにそれに似ている別のタイプをタイプしたと思う。

私は文字通りコンパイル時に文字列を作成していますが、ブラウザはでなく、はHTMLとして扱うか、何らかの方法で解析する必要があります。だから何を与える?スクリプトタグ内</script>を挿入した場合

+2

ブラウザによっては、「」のJavascriptの解釈が停止するものがあります。それを削除するか、「<\/SCRIPT>」に置き換えてください。 –

+0

(これはSO全体に欺かれていることに注意してください) –

+1

@ Goothdo \t「ベスト」が何であるかわからない、例えばhttp://stackoverflow.com/questions/30231151/syntaxerror-unterminated-string-literal- script-script-tag-not-working-wi、http://stackoverflow.com/q/26691529/438992、http://stackoverflow.com/q/31153809/438992、http://stackoverflow.com/q/ 17344196/438992、http://stackoverflow.com/q/2170609/438992、http://stackoverflow.com/q/11945771/438992、http://stackoverflow.com/q/10154514/438992など –

答えて

14

、どんなにそれが引用符、アポストロフィ内の文字列、またはリテラルでもテンプレートがいた場合、それは常には、スクリプトタグを閉じます。あなたは外部スクリプト<script src="url"></script>を使用する場合は、それはエスケープせずに正常に動作する必要があり

var str=` 
<script> 
<\/script> 
` 
var pre = document.createElement('pre') 
pre.textContent = str 
document.body.appendChild(pre) 

を:あなたはそのような、たとえば、それをエスケープする必要があります。

+1

Ah ....何らかの理由で(他の種類の引用符をテンプレート引用符の中に自由に置くことができるという事実のように)私は、テンプレート引用符の中の何かがドキュメントの他の部分から分離されていると思っていました。それは確かにそれを修正する! – Michael

関連する問題