我可以放_satellite.pageBottom();吗?在JS文件上?

时间:2019-05-27 05:53:17

标签: javascript adobe-analytics adobe-dtm

通常,您将_satellite.pageBottom()方法尽可能多地放在html的最下部,就像:

...
<script type="text/javascript">_satellite.pageBottom();</script>
</body>
</html>

但是我在浏览器中遇到错误,要么由于带宽过多而被阻止加载,要么浏览器只是阻止其加载或延迟加载而导致_satellite undefined错误

所以我要做的是将其放入JS文件并添加defer="defer"属性

...
<script src="/js/satellite.js?t=153664965811" defer="defer"></script>
</body>
</html>

因此,只要浏览器不阻止跟踪JS API,这现在就可以正常工作。

这可以吗?

2 个答案:

答案 0 :(得分:0)

使用defer(您可以只写defer,不需要defer=defer)强制浏览器按顺序获取指定的资源。 您要执行的操作是按以下顺序放置脚本:

<script src="/js/satellite.js?t=153664965811" defer></script>
<script type="text/javascript" defer>_satellite.pageBottom();</script>

HTML defer

答案 1 :(得分:0)

摘要

从官方上讲,您不应该这样做。

详细信息

documentation指出以下内容:

  

重要提示:要成功实施,请务必确保   请按照Adobe帮助中显示的说明进行操作。特别,   您必须将标题代码放在文档的<head>部分中   模板。另外,您必须将页脚代码放在   关闭</body>标签。将这些嵌入代码中的任何一个放置在   您的标记,或使用异步方法来附加嵌入代码,   或以任何方式包装嵌入代码,均不受支持   动态标签管理的实现。嵌入代码必须为   完全按照规定实施。

     

不受支持的实现将产生意外结果,并且   阻止客户服务和工程部门协助您   实施。

因此,在我无话可说之前,官方的回答是“不”,您不应该做这种事情。即使实施不是当前的最佳做法,通常也无法获得Adobe的支持。

非官方..

好的,首先,您提到在尝试执行此类操作时遇到错误。首先,我不清楚您提到的错误。特别是_satellite undefined错误。对我来说,这听起来像是您尝试异步和/或延迟加载 Header 脚本,并且DTM库没有在 Footer 代码段({{ 1}})被调用。但是您没有在问题中提到这一点;您只提到了 Footer 代码段的问题。

再一次,正式地,您不能对任一代码片段执行此类操作。但是,即使您决定偏离文档,也绝对需要确保在页脚之前加载了Header代码段,否则您将收到“ _satellite.pageBottom()未定义”类型错误,因为Header脚本就是{{ 1}}已定义。因此,如果您想涉猎异步处理和/或延迟处理,则应研究Promise链,或将Footer脚本包装在某种逻辑中,以寻找_satellite,如果找不到_satellite,则尝试再次多次。或者..

在DOM准备就绪时,如果尚未执行_satellite,则DTM将在内部自行调用它。因此,从技术上讲,如果要使用完整的异步/延迟实现,则甚至不需要在网站上包含Footer脚本。

请注意,要实现完全异步/延迟的DTM实现,意味着您必须确保通过DTM部署的所有也是异步的。我不知道您通过DTM部署了什么,但是实际上,至少可以肯定地说,您至少可以通过DTM部署Experience Cloud ID服务(ECIDS)和Adobe Analytics(AA),并且DTM当前不支持部署这些。以异步方式(需要在AA之前加载ECIDS)。这只是一个 标签/工具示例。

因此,至少,您可能至少应该尊重Header标签的文档。但是,如果确保只在DOM就绪/异步上部署东西,则Footer标记对于其他几乎所有其他东西来说都是宽容的/可行的。 但是,再次正式地,您应该同时遵循两者的说明文件,这是我的正式答案。

替代...

您应该考虑从Adobe DTM迁移到Adobe Launch。 Launch是Adobe最新的标签管理解决方案。 DTM正在逐步淘汰。可以使用与DTM相同的Header和Footer标签来部署Launch,可以在其中强制计时,但是与DTM不同,Launch还具有官方的异步部署选项。可以异步加载Header标签,并且没有Footer标签(用于异步部署)。 Launch做一些魔术,以确保Adobe工具的操作顺序(例如,上面提到的ECIDS与AA)。在工作中,还存在对通过Launch部署的其他标签的承诺链支持。

唯一的症结在于您是否使用Adobe Target。 Target确实有一个异步库版本,但是大多数人都避免使用它,因为它与UX的基本工作原理不一致。即,异步将在加载时引起“闪烁”效果,因为默认页面内容已删除并且浏览器正在等待响应以将其加载。糟糕的UX会损害AB / MV测试工作的完整性,因此人们通常对此表示反对。因此,如果您使用Target或总体上计划进行AB / MV测试,则应坚持正常部署。但这一切都与您最初的问题有所牵连。