4

なぜ私は...

SyntaxError:終了していない文字列リテラル

... Firefoxおよび...

Uncaught SyntaxError:無効または予期しないトークン

... Chromeで実行すると...

$(document).ready(function () {
  function addJSBeforeEndBody(code) {
       $('body').append('<script>' + code + '</script>');
  }
  addJSBeforeEndBody('$(document).ready(function() { console.log("I never end up here."); });');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

4

2 に答える 2

10

文字列を分割します"</script>"(javascriptコード内)。意図した文字列リテラルではなく、実際の終了スクリプトタグとして解釈されます。

$(document).ready(function () {
  function addJSBeforeEndBody(code) {
       $('body').append('<script>' + code + '</scr' + 'ipt>');
  }
  addJSBeforeEndBody('$(document).ready(function() { console.log("It works now."); });');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

于 2012-04-14T14:58:56.543 に答える
2
'<script>'+code.toString()+'<\/script>'

'</script>'ブラウザは、スクリプトの終了タグを示すと表示されたら、スクリプト要素を閉じます。スラッシュをエスケープすると、ブラウザはテキスト解釈モードのままになります。

または、前述のように分割します。

"<script>"+code.toString()+"<"+"/script>"
于 2012-04-14T15:16:02.350 に答える