1

我试图用 jsFiddle 示例在 SO 上回答用户的问题。该示例是通过 Javascript 动态初始化iframe元素。要显示的内容是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 example

有没有办法编写变量赋值以包含script标签,以免破坏 jsFiddle 接口?

4

3 回答 3

4

在你的内联 javascript 中的任何地方写字</script>都会破坏包含的 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-typeof来服务他们的文档text/html,因此 cdata 不会被正确解析为 XHTML,并且结束</script>标记会破坏所有内容。

通过 XHTML 代理获取文档应该可以工作,但这是没有选择的。因此,您需要对其进行转义,例如通过插入反斜杠或'+'(文字连接)。

于 2012-07-31T22:34:39.120 回答