我可以把 _satellite.pageBottom();在 JS 文件上?
Can I put the _satellite.pageBottom(); on a JS file?
通常,您会尽可能多地将 _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。
这样可以吗?
总结
正式地说,你不应该做这种事。
详情
documentation 声明如下:
Important: For a successful implementation, it is critical that you
follow these instructions as they appear in Adobe Help. Specifically,
you must place the header code in the <head>
section of your document
templates. Also, you must place the footer code just before the
closing </body>
tag. Placing either of these embed codes elsewhere in
your markup, or using asynchronous methods to append the embed codes,
or wrapping the embed codes in any way, are not a supported
implementations of dynamic tag management. The embed codes must be
implemented exactly as provided.
An unsupported implementation will yield unexpected results and
prevent Customer Care and Engineering from assisting with your
implementation.
所以,在我说别的之前,官方的回答是不,你不应该做这种事情。失去 Adobe 的支持通常不是一个好主意,即使实施不是当前的最佳实践。
非正式..
好的,首先,您提到在尝试执行此类操作时出现错误。首先,我不太清楚你提到的错误。特别是 _satellite undefined
错误。对我来说,这听起来像是你试图加载 Header 脚本异步 and/or 延迟,并且 DTM 库没有在 Footer[= 之前及时加载63=] 片段(_satellite.pageBottom()
)被调用。但是您在问题中没有提到这一点;您只提到了 Footer 片段的问题。
再一次,正式地,你不能对 中的任何一个片段执行此类操作。但是即使你决定偏离文档,你肯定需要确保在页脚之前加载 Header 片段,否则你会得到“_satellite
is undefined”类型错误,因为 Header 脚本是 _satellite
被定义。因此,如果你想涉足使异步 and/or 延迟,你应该研究承诺链,或者将页脚脚本包装在一些寻找 _satellite
的逻辑中,如果没有找到, setTimeout
再试几次。或者..
在DOM就绪,如果_satellite.pageBottom()
还没有执行,DTM会在内部自行调用。因此,如果您要进行完整的 async/deferred 实施,从技术上讲,您甚至不需要在您的网站上包含页脚脚本。
关于这一点.. 进行完整的 async/deferred DTM 实施意味着您必须确保通过 DTM 部署的一切 也是异步的。我不知道您通过 DTM 部署了哪些内容,但实际上,您几乎可以肯定至少通过 DTM 部署了 Experience Cloud ID Service (ECIDS) 和 Adobe Analytics (AA),而 DTM 目前不支持部署这些以异步方式(ECIDS 需要在 AA 之前加载)。这只是 一个 tag/tool 例子。
因此,至少,您应该至少尊重 Header 标记的文档。但是,如果您确保只在 DOM 就绪/异步上部署内容,则 Footer 标记对于几乎所有其他内容都更加宽容/可行。 但是,正式地,您应该遵循两者的文档,这是我的官方回答。
另一种选择...
您应该考虑从 Adobe DTM 迁移到 Adobe Launch。 Launch 是 Adobe 最新的标签管理解决方案。 DTM 正在逐步淘汰。 Launch 可以像 DTM 一样使用 Header 和 Footer 标签进行部署,其中可以强制执行时序,但与 DTM 不同的是,Launch 还具有官方的异步部署选项。 Header 标签可以异步加载,没有 Footer 标签(用于异步部署)。 Launch 使用一些魔术来确保 Adobe 工具的操作顺序(例如,上面提到的 ECIDS 与 AA)。对于通过 Launch 部署的其他标签,还有承诺链支持正在开发中。
唯一真正的症结在于您是否使用 Adobe Target。 Target 确实有一个异步库版本,但大多数人都避免使用它,因为它与 UX 的基本工作方式不一致。也就是说,异步会在加载时产生 "flicker" 效果,因为默认页面内容已被删除,浏览器正在等待加载它的响应。这通常是不受欢迎的,因为糟糕的用户体验会损害 AB/MV 测试工作的完整性。因此,如果您使用 Target,或计划进行一般 AB/MV 测试,则应坚持正常部署。但是所有这些都偏离了您最初的问题。
通常,您会尽可能多地将 _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。
这样可以吗?
总结
正式地说,你不应该做这种事。
详情
documentation 声明如下:
Important: For a successful implementation, it is critical that you follow these instructions as they appear in Adobe Help. Specifically, you must place the header code in the
<head>
section of your document templates. Also, you must place the footer code just before the closing</body>
tag. Placing either of these embed codes elsewhere in your markup, or using asynchronous methods to append the embed codes, or wrapping the embed codes in any way, are not a supported implementations of dynamic tag management. The embed codes must be implemented exactly as provided.An unsupported implementation will yield unexpected results and prevent Customer Care and Engineering from assisting with your implementation.
所以,在我说别的之前,官方的回答是不,你不应该做这种事情。失去 Adobe 的支持通常不是一个好主意,即使实施不是当前的最佳实践。
非正式..
好的,首先,您提到在尝试执行此类操作时出现错误。首先,我不太清楚你提到的错误。特别是 _satellite undefined
错误。对我来说,这听起来像是你试图加载 Header 脚本异步 and/or 延迟,并且 DTM 库没有在 Footer[= 之前及时加载63=] 片段(_satellite.pageBottom()
)被调用。但是您在问题中没有提到这一点;您只提到了 Footer 片段的问题。
再一次,正式地,你不能对 中的任何一个片段执行此类操作。但是即使你决定偏离文档,你肯定需要确保在页脚之前加载 Header 片段,否则你会得到“_satellite
is undefined”类型错误,因为 Header 脚本是 _satellite
被定义。因此,如果你想涉足使异步 and/or 延迟,你应该研究承诺链,或者将页脚脚本包装在一些寻找 _satellite
的逻辑中,如果没有找到, setTimeout
再试几次。或者..
在DOM就绪,如果_satellite.pageBottom()
还没有执行,DTM会在内部自行调用。因此,如果您要进行完整的 async/deferred 实施,从技术上讲,您甚至不需要在您的网站上包含页脚脚本。
关于这一点.. 进行完整的 async/deferred DTM 实施意味着您必须确保通过 DTM 部署的一切 也是异步的。我不知道您通过 DTM 部署了哪些内容,但实际上,您几乎可以肯定至少通过 DTM 部署了 Experience Cloud ID Service (ECIDS) 和 Adobe Analytics (AA),而 DTM 目前不支持部署这些以异步方式(ECIDS 需要在 AA 之前加载)。这只是 一个 tag/tool 例子。
因此,至少,您应该至少尊重 Header 标记的文档。但是,如果您确保只在 DOM 就绪/异步上部署内容,则 Footer 标记对于几乎所有其他内容都更加宽容/可行。 但是,正式地,您应该遵循两者的文档,这是我的官方回答。
另一种选择...
您应该考虑从 Adobe DTM 迁移到 Adobe Launch。 Launch 是 Adobe 最新的标签管理解决方案。 DTM 正在逐步淘汰。 Launch 可以像 DTM 一样使用 Header 和 Footer 标签进行部署,其中可以强制执行时序,但与 DTM 不同的是,Launch 还具有官方的异步部署选项。 Header 标签可以异步加载,没有 Footer 标签(用于异步部署)。 Launch 使用一些魔术来确保 Adobe 工具的操作顺序(例如,上面提到的 ECIDS 与 AA)。对于通过 Launch 部署的其他标签,还有承诺链支持正在开发中。
唯一真正的症结在于您是否使用 Adobe Target。 Target 确实有一个异步库版本,但大多数人都避免使用它,因为它与 UX 的基本工作方式不一致。也就是说,异步会在加载时产生 "flicker" 效果,因为默认页面内容已被删除,浏览器正在等待加载它的响应。这通常是不受欢迎的,因为糟糕的用户体验会损害 AB/MV 测试工作的完整性。因此,如果您使用 Target,或计划进行一般 AB/MV 测试,则应坚持正常部署。但是所有这些都偏离了您最初的问题。