我正在开发支持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>
但是脚本的主体根本没有被执行。即使满足所有条件:
解析器插入 FALSE ,因为它是在文档提取过程中解析的。
已启动 FALSE ,因为第一次准备因空虚而失败(准备算法的第4步)
新文本节点已插入脚本元素。
最后,我尝试了规范中第3点的相应测试:
<script id="fourth"></script>
<script>
var fourthScript = document.getElementById("fourth");
fourthScript.setAttribute("src","script.js");
</script>
再一次,没有任何事情发生。没有执行外部脚本。
我错过了什么?我对specification的解释有什么问题?
感谢您的任何建议。
答案 0 :(得分:1)
您对规范的解释似乎很好,因此您的测试运行必须存在缺陷。
您的测试"third"
的JSFiddle位于:http://jsfiddle.net/Pfrkc/1/
您的测试"fourth"
的JSFiddle位于:http://jsfiddle.net/Pfrkc/2/
对我来说都很好。