代码之家  ›  专栏  ›  技术社区  ›  steven

为什么开发人员在JavaScript中拆分脚本?

  •  4
  • steven  · 技术社区  · 16 年前

    我看到很多这样的事情: S = "<scr" + "ipt language=\"JavaScript1.2\">\n<!--\n";

    "<script>" ?

    2 回复  |  直到 16 年前
        1
  •  7
  •   Community Mohan Dere    9 年前

    看看这个问题:

    Javascript external script loading strangeness.

    取自 bobince's answer

    要了解问题所在,请查看顶部 其脚本元素中的行:

    <script type="text/javascript">
        document.write('<script src="set1.aspx?v=1234"
                               type="text/javascript"></script>');
    </script>
    

    因此,一个HTML解析器出现并看到 <脚本>,正常<标签>解析 已禁用(在SGML术语中 在脚本块结束的地方,HTML 关闭标签</脚本>。

    它找到的第一个是 在字符串文本中。HTML 字符串文本,因为HTML解析器 语法,他们只知道CDATA。所以 你实际上说的是:

    <script type="text/javascript">
        document.write('<script src="set1.aspx?v=1234"
                               type="text/javascript">
    </script>
    

    也就是说,未关闭的字符串文字 以及未完成的函数调用。这些 导致JavaScript错误和 从未写入所需的脚本标记。

    解决这个问题的共同尝试 是:

    document.write('...</scr' + 'ipt>');
    

    但这并不能解释为什么要在开始标记中进行。

        2
  •  0
  •   Ry- Vincenzo Alcamo    14 年前

    附加脚本的更合适的方法是使用DOM。

    1. 创建类型为的元素 <script> document.createElement .
    2. 设置其属性( src , type )
    3. body.appendChild 将其添加到DOM中。