【问题标题】:Document write gives strange output文档写入给出了奇怪的输出
【发布时间】:2013-06-25 00:23:27
【问题描述】:

我正在编写一个脚本来检测 jQuery,如果它不存在则插入 Google CDN 版本和本地回退(不要问为什么......这不是我的想法),问题是当我尝试做 document.write 我得到一个奇怪的输出

document.write("<script>window.jQuery || document.write('<script src=\"js/jquery.v1.9.1.js\"><\/script>')</script>");

输出应该是:

<script>window.jQuery || document.write('<script src="js/jquery.v1.9.1.js"></script>')</script>

但到了:

 <script>window.jQuery || document.write('<script src="js/jquery.v1.9.1.js"></script>"')"

我一辈子都想不通怎么了

【问题讨论】:

  • 那是因为字符串中的&lt;/script&gt; 与开头的&lt;script&gt; 元素的结尾相匹配。见document.createElement()
  • 为什么不这样做呢:if (!window.jQuery) document.write("&lt;script src=\"js/jquery.v1.9.1.js\"&gt;&lt;/script&gt;");

标签: javascript


【解决方案1】:

基本上,发生的事情是当document.write 打印出来时

<script>window.jQuery || document.write('<script src=\"js/jquery.v1.9.1.js\"></script>')</script>

第一个 &lt;/script&gt; 被解析为实际的脚本结束标记,即使它在字符串内部,也会导致类似

<script>
    window.jQuery || document.write('<script src=\"js/jquery.v1.9.1.js\">
</script>
')
</script>

字符串没有结束(未终止的字符串文字),因为它的右单引号现在在脚本之外,并且还有一个悬空的脚本结束标记。为了阻止这种情况的发生,你只需要像疯了一样的逃避字符串内的脚本标签,尤其是字符串内的字符串。下面是一个工作示例。

document.write("<script>window.jQuery || document.write('<script src=\"js/jquery.v1.9.1.js\"><\\\/script>')<\/script>");

【讨论】:

    【解决方案2】:

    试试这个

    document.write("<script>window.jQuery || document.write('<script src=\"js/jquery.v1.9.1.js\"/>')<\/script>");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-27
      • 1970-01-01
      • 2020-12-29
      • 2014-01-21
      • 2014-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多