1

jsFiddleの例を使用して、SOに関するユーザーの質問に答えようとしていました。この例は、iframeJavascriptを介して要素を動的に初期化することでした。によって表示されるコンテンツiframeは、変数に割り当てられた有効なhtmlドキュメントでした。変数の割り当ては次のとおりです。

var aValidDoc = '<!DOCTYPE html PUBLIC
\"-//W3C//DTD XHTML 1.0
Transitional//EN\"
\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html
xmlns=\"http://www.w3.org/1999/xhtml\">
<head><title></title><style
type=\"text/css\">@media
screen{html,body{margin:0;padding:0;height:100%;width:100%}p{margin:15px;}}</style>
</head><body><p>This is the content of
the dynmic document.</p><body></html>';

これが私がやりたいことの抜粋です:

</p><script type=\"text/javascript\">alert(\"Hi\")</script><body></html>';

実際、コメントでさえ<script>インターフェースを壊します:

// below line breaks jsFiddle
// <script type="text//javascript"></script>

これがフィドルです:jsFiddleの例

scriptjsFiddleインターフェースを壊さないようにタグを含めるように変数代入を書く方法はありますか?

4

3 に答える 3

4

文字通り</script>、インラインjavascriptのどこかに書き込むと、含まれているhtmlタグが壊れます。

簡単な回避策は、"<\/script>"代わりに書くことです。文字列リテラル内にあるため、バックスラッシュが削除され、次のようになります。"</script>"

http://jsfiddle.net/KavDy/2/

于 2012-07-31T22:16:47.677 に答える
1

</script>スクリプトを閉じて、スクリプトを好きなよう%3c/script>にエスケープして、unescape 元に戻すことができます

http://jsfiddle.net/mowglisanu/KavDy/3/

于 2012-07-31T22:19:12.873 に答える
0

jsFiddleはスクリプトをcdata-sectionに配置します:

<head>
  ...
  <script type='text/javascript'>//<![CDATA[ 

    var aValidDoc = '...<script>...</script>...';

    // also in comments:
    // <script type="text//javascript"></script>

  //]]>
  </script>
</head>

ただし、ドキュメントにのを使用してサーバーを作成するcontent-typeためtext/html、XHTMLとしてcdataが正しく解析されず、終了</script>タグによってすべてが破損します。

XHTMLプロキシを介してドキュメントを取得することは機能するはずですが、それはオプションではありません。'+'したがって、バックスラッシュまたは(リテラル連結)を挿入するなどして、エスケープする必要があります。

于 2012-07-31T22:34:39.120 に答える