动态标签管理加载顺序与JavaScript加载顺序相关。
下图显示了一般页面加载顺序。
上图上的红色文本表示非顺序活动。 绿色文本表示顺序活动。
以下部分讨论了在四个页面加载阶段如何使用不同的JavaScript/第三方标记脚本选项:
页面顶部
<HEAD/>
用标签,则注入到DTM <SCRIPT/>
库下包括脚本,否则注入到 <BODY/>
<HEAD/>
下的包括脚本(作为JavaScript包括) <SCRIPT/>
<HEAD/>
下的包括脚本(作为JavaScript包括) <SCRIPT/>
<SCRIPT/>
注入 <HEAD>
异步包含脚本IFRAME
入,不影响页面HTML页面底部
顺序HTML: 在回调 _satellite.pageBottom()
脚本之 document.write()
后插入DOMREADY之前的脚本,以便不会破坏可见页面
顺序JavaScript全局: 作为JavaScript _satellite.pageBottom()
包括 <SCRIPT/>
顺序JavaScript本地: 作为JavaScript _satellite.pageBottom()
包括 <SCRIPT/>
非顺序JavaScript: 在DTM库下 <SCRIPT/>
注入 <HEAD>
异步包含脚本
非顺序HTML: 隐藏时注 IFRAME
入,不影响页面HTML
DOM Ready
DOMREADY
为处于活动状 document.write()
态并将覆盖页面<HEAD/>
下的包括脚本(作为JavaScript包括) <SCRIPT/>
<HEAD/>
下的包括脚本(作为JavaScript包括) <SCRIPT/>
<SCRIPT/>
注入 <HEAD>
异步包含脚本IFRAME
入,不影响页面HTML加载(窗口加载)
DOMREADY
为处于活动状 document.write()
态并将覆盖页面<HEAD/>
下的包括脚本(作为JavaScript包括) <SCRIPT/>
<HEAD/>
下的包括脚本(作为JavaScript包括) <SCRIPT/>
<SCRIPT/>
注入 <HEAD>
异步包含脚本IFRAME
入,不影响页面HTML非连续HTML第三方规则始终放置在iFrames中。 没有异步HTML这样的名称,因此动态标签管理使用该名称引用iFrame功能。
尽管脚本可能会注入到页 <HEAD/>
面处理(如和 DOMREADY
)的后 ONLOAD
期,脚本将仅以适当的时序出现,并且是全局、本地、同步或异步的。 此外,动态标签管理会检查以确保正确处理时间,如果 DOMREADY
已经发生,则不会尝试破坏页面 document.write()
。 动态标签管理尽力避免在可能的情况下中断可视页面。 因此,当安装实际上可能不是“异步”时,您可能会看到“asyc安装”错误。 它只是一个警报,可帮助您识别页面上的时间有点可疑,并且在所有同步脚本加载 DOMREADY
之前已按应有方式触发。 如果发生这种情况,请检查以确 pageBottom()
保回调在紧靠标记之前的正确位 </body>
置。 否则,可能会发生这些类型的错误。
动态标签管理队列按上述顺序处理它们,但不区分页面加载阶段中的JavaScript和HTML脚本。
这意味着页面加载规则在队列中的顺序决定了它们的离队顺序。
确定队列顺序的简单方法是在JavaScript控 _satellite.configurationSettings.pageLoadRules
制台中查看并检查序列。
例如,在JavaScript控制台中输入以下代码,即可看到页面加载规则队列顺序的完整视图:
_satellite.each(_satellite.configurationSettings.pageLoadRules,function(i){(i.event=='pagetop')?_satellite.notify(i.event+': '+i.name,1):false})
_satellite.each(_satellite.configurationSettings.pageLoadRules,function(i){(i.event=='pagebottom')?_satellite.notify(i.event+': '+i.name,1):false})
_satellite.each(_satellite.configurationSettings.pageLoadRules,function(i){(i.event=='domready')?_satellite.notify(i.event+': '+i.name,1):false})
_satellite.each(_satellite.configurationSettings.pageLoadRules,function(i){(i.event=='windowload')?_satellite.notify(i.event+': '+i.name,1):false})