HTML5 - 脚本准备和执行

时间:2014-02-01 21:31:51

标签: javascript html html5 mozilla rhino

我正在开发支持Java中(X)HTML呈现引擎的脚本编写。我想遵循HTML5规范。

目前我正在试图找出哪些情况(在哪种情况下)应该是“准备好”的脚本。

规范表示调用脚本准备时的三个事件:

  

1)脚本元素在节点时插入到文档中   在任何其他脚本元素之后根据DOM插入   在树中的Document中较早的同时插入   顺序。

     

2)脚本元素位于Document中,节点或文档片段位于   插入任何脚本元素后插入到script元素中   那个时候。

     

3)脚本元素在Document中,并在其中设置了src属性   以前该元素没有这样的属性。

据我所知,运行“准备步骤”的第二个事件应该是将节点插入到空脚本元素中。所以我尝试了这个:

<script id="third"></script> 
<script>
    var thirdScript = document.getElementById("third");
    var thirdScriptBody = document.createTextNode("document.write(\"execution test\");")
    thirdScript.appendChild(thirdScriptBody);
</script>

但是脚本的主体根本没有被执行。即使满足所有条件:

  1. 解析器插入 FALSE ,因为它是在文档提取过程中解析的。

  2. 已启动 FALSE ,因为第一次准备因空虚而失败(准备算法的第4步)

  3. 新文本节点已插入脚本元素。

  4. 最后,我尝试了规范中第3点的相应测试:

    <script id="fourth"></script> 
    <script>
        var fourthScript = document.getElementById("fourth");
        fourthScript.setAttribute("src","script.js");
    </script>
    

    再一次,没有任何事情发生。没有执行外部脚本。

    我错过了什么?我对specification的解释有什么问题?

    感谢您的任何建议。

1 个答案:

答案 0 :(得分:1)

您对规范的解释似乎很好,因此您的测试运行必须存在缺陷。

您的测试"third"的JSFiddle位于:http://jsfiddle.net/Pfrkc/1/

您的测试"fourth"的JSFiddle位于:http://jsfiddle.net/Pfrkc/2/

对我来说都很好。