为什么在结束上下文之前评估动态内联脚本标记
Why are dynamic inline script tags evaluated before ending the context?
有人可以指出我有关此行为的相关标准部分吗?
http://arcanis.github.io/dynamic-scripts/
基本上,有两件事让我感到惊讶:我一直认为动态脚本标签总是在从第一个执行器返回后立即加载(就好像浏览器正在执行内部设置立即一样)。但是,在此示例中:
-
内联标记在窗口范围内立即执行(它们不等待当前执行流结束)
-
远程标记在每个其他标记之后执行,即使它们已附加到它们之前
这种行为正确吗?Chrome,Firefox甚至IE11都得到了相同的结果(除了IE没有触发动态附加的远程脚本),所以我可能错过了一些东西。
<小时 />供参考的简短代码示例:
<script>
log("Starting standard script tag ...");
var s = document.createElement( 'script' );
s.appendChild( document.createTextNode( 'log("Executing dynamically appended inline script tag")' ) );
document.querySelector( 'head' ).appendChild( s );
log("Ending standard script tag");
</script>
首先我需要
提到我没有时间精确地查看规格,所以我可能解释错了。
但是,查看准备脚本部分,您有以下语句:
[...]
15. 然后,必须遵循以下描述情况的选项中的第一个:
[...]如果元素没有 src 属性,并且该元素已标记为"解析器插入",并且创建脚本的分析器是 XML 解析器,或者它是脚本嵌套级别不大于 1 的 HTML 解析器,并且创建脚本元素的 HTML 解析器或 XML 解析器的文档具有阻止脚本
的样式表该元素是创建该元素的解析器的 Document 的挂起解析阻止脚本。(每个文档一次只能有一个这样的脚本。设置元素的"准备被解析器执行"标志。解析器将处理脚本的执行。
[...]
否则
用户代理必须立即执行脚本块,即使其他脚本已在执行。
我是这样理解的:
- 以编程方式创建的元素与 Else 条件匹配,因为其他条件(也是我省略的条件)不匹配,因此必须立即执行脚本。
但正如我所说,我没有时间详细阅读整件事,我将在接下来的几天这样做。但就目前而言,这可能已经可以帮助您。
编辑在我第二次阅读第一个引用的条件后,我意识到我确实没有仔细阅读([...]and the Document of the HTML parser or XML parser that created the script element has a style sheet that is blocking scripts[...]
),所以我用<del>
标记。
相关文章:
- 如何动态更改脚本src
- 动态添加AngularJS脚本
- 动态创建的iframe中的window.onerror在lne 0处给出脚本错误
- 有没有一种方法可以用YepNope.js为脚本提供动态名称
- javascript动态内容与选择长运行脚本
- 使用appendChild()动态添加的脚本是按顺序执行还是并行执行
- 性能:动态脚本注入与服务器渲染脚本
- 如何在blogspot中加载java脚本(动态主题)
- 控制不止一次跳水的风格's风格使用java脚本动态,使用类
- 将背景图像更改为另一个由ajax调用脚本动态创建的图像
- 引用从以前加载的 jQuery 脚本动态加载的内容
- 如何在ASP.Net中使用java脚本动态调整页边距
- IE在添加到onclick处理程序时从缓存中获取脚本(动态添加)
- 为什么不是'这个CanvasJS脚本动态地改变变量
- 用调用RSS提要的脚本动态构建iframe
- 单击“Java脚本动态检查”复选框
- JS脚本动态加载不一致
- Google Apps脚本-动态添加删除UiApp表单元素
- 将脚本动态添加到某些页面
- 在由外部脚本动态创建的iframe中选择一个元素