【问题标题】:"S is not defined" Error in Adobe DTMAdobe DTM 中的“S 未定义”错误
【发布时间】:2016-08-15 10:21:38
【问题描述】:

我正在将 s_code 版本 27.5 上的现有 Adob​​e 分析实施迁移到 DTM。迁移的第一步以及项目范围内的内容是将当前 s_code 转换为 Adob​​eDTM 的工作。

该站点有多个 JS 文件,其中包含需要初始化“对象”才能工作的函数,但是在大多数这些 JS 函数运行之后,s 在 s_code 内容中被初始化,因此会为“S is”抛出错误没有定义的'。它没有像在标准实现中那样被全局初始化。

有没有一种方法可以在全球范围内初始化 DTM 卫星库中的“s”。我试图添加 var = s{};第三方/自定义标签区域下的页面加载规则,但只是偶尔运气好,有时会抛出错误。

对此问题的任何支持/见解将不胜感激。

谢谢!

【问题讨论】:

    标签: analytics adobe-analytics


    【解决方案1】:

    第 1 步:将代码配置更改为自定义

    注意:如果您将旧版 H 代码作为工具迁移到 DTM,那么您应该已经熟悉并已完成此步骤,因为 DTM 不允许您指定旧版 H 代码“由 Adob​​e 管理”选项。

    在 Adob​​e Analytics 工具的 图书馆管理 部分,将 代码配置 选项更改为 Custom,并将 Code Hosted 选项更改为 @ 987654322@。

    如果您使用的是旧版 H 代码库,那么您必须还选中“使用下面的自定义代码设置报表包”选项。如果您迁移到 DTM 的一部分是迁移到 AppMeasurement 库,则选中此选项是可选的,具体取决于您希望如何处理报表包路由。

    然后,点击打开编辑器按钮打开编辑器。您应该会在代码框中看到 Adob​​e Analytics 库。如果您要迁移旧版 H 代码,请删除当前框中的所有内容并添加旧版 H 代码库(根据问题您应该已经完成​​)。

    第 2 步:实例化 s 对象

    如果您使用的是旧版 H 代码,则将以下行添加到代码框顶部的库上方:

    window.s = s_gi("[report suite id(s)]");

    您需要将 [report suite id(s)] 替换为您要将数据发送到的报表包 ID。 s_gi() 需要将值传递给它,这就是为什么您必须选中上面的复选框。

    如果您使用的是 AppMeasurement 库,则将以下行添加到代码框顶部的库上方:

    window.s = new AppMeasurement("[report suite id(s)]");

    如果您选中了“使用下面的自定义代码设置报表包”复选框,请指定报表包。如果你没有检查它,那么不要将任何东西传递给Appmeasurement()。或者,您可以不传递任何内容,但也可以在其下方添加以下内容:

    s.account="[report suite id(s)]";

    但请注意,在第 3 步中,无论如何您都将在 doPlugins 中设置它,因此您在这里并不真正需要它(我只是为可能正在将 AppMeasurement s_code.js 迁移到 DTM 的其他读者添加了这个旁注)。

    注意:除了 window.s 部分之外,您应该已经熟悉这行代码,并且已经具备用于填充报表包的逻辑,来自旧版实现。具体来说,您可能正在使用dynamicAccountXXX variables。如果您要升级到AppMeasurement 库,那么您将需要编写自己的逻辑来模拟它,因为AppMeasurement(原因不明)没有此功能。

    第 3 步:在页面加载后设置报表包

    关于将 Adob​​e Analytics 作为工具实施的众多注意事项之一是,只要触发了基于事件或直接调用规则并且 AA 设置为触发,DTM(出于任何人都不清楚的原因)会创建一个新的 s 对象。实际上,这意味着您在工具配置的自定义代码框中设置的几乎所有变量都不会被转移到页面上的后续 AA 调用中——报告套件就是其中之一。

    如果 DTM 处于生产模式,则 DTM 对报表包的作用是将其设置为指定的生产报表包,或者如果处于暂存模式,则将其设置为指定的生产报表包。 即使您启用了“使用下面的自定义代码设置报表包”选项!

    要解决此问题,如果您尚未将 doPlugins 函数(和 usePlugins)包含在该工具的自定义代码框中(您几乎可以肯定会这样做,来自传统实施),并且您还需要在其中分配报表包(doPluginsusePlugins 现在可以继续使用)。

    对于旧版 H 库,在 doPlugins 中添加以下内容:

    s.sa("[report suite id(s)]");

    注意:doPlugins 中设置dynamicAccountXXX 变量将不起作用。您需要编写自己的逻辑来将报表包传递给s.sa()

    对于 AppMeasurement 库,在 doPlugins 内,添加以下内容:

    s.account="[report suite id(s)]";

    一般说明:

    • 图书馆管理 部分,将 Load library at 设置为 Page Top 将在以下位置同步加载库 你把你的DTM Header标签,这是你最早可以触发它的 通过 DTM。但是,这并不能保证图书馆将 在执行引用它的其他脚本之前加载 (例如,在上面的某个其他脚本标记中引用 s 对象 DTM Header 脚本将继续为您提供参考错误)。
    • 如果您确实仍在使用旧版 H 库,那么我会 建议您的最高优先级是迁移到 AppMeasurement 图书馆。甚至比将代码迁移到 DTM、IMO 的优先级更高。

    • 虽然我赞同 Mark 关于将 AA 代码作为第三个代码实现的观点 派对标签一般,可悲的事实是在实践中,它可能仍然是 您目前的最佳选择,具体取决于您的具体情况。 DTM 目前有太多的警告、缺点和彻底的错误, 使得不可能将 AA 实现为 DTM 中的工具,具体取决于 您的确切实施要求。特别是当涉及到 使 AA 与某些常见的 3rd 方工具集成,甚至 Adobe 的一些其他工具!

    【讨论】:

      【解决方案2】:

      如果您完全迁移到 DTM 以进行分析部署,而不是尝试从旧 H 页代码中引用 s 对象,您会做得更好。

      如果可以选择完全从 H 代码迁移到 DTM,我会执行以下操作:

      1. 删除所有 H 页代码和对 s_code 的任何引用
      2. 删除链接或页面上对 s.t 或 s.tl 的所有调用
      3. 在所有页面上部署 DTM 页眉/页脚代码
      4. 在 DTM 中,添加 Adob​​e Analytics Tool
      5. 在 DTM 中,添加 Adob​​e Marketing Cloud ID 服务
      6. 在 DTM 和 Adob​​e Analytics 工具的“自定义页面代码”中,创建“do_plugins”部分并从 H 代码添加任何自定义插件。

      按照这些步骤将允许在 DTM 中创建 s 对象,并允许所有其他规则正确使用它。

      我不会做的事:

      1. 将 H 代码 (s_code) 部署为第三方脚本,并尝试在 Adob​​e Analytics 工具之外引用 s 对象。这效率不高,并且不允许您从 DTM、IMO 获得最佳实践。

      标记

      【讨论】:

        【解决方案3】:

        使用 DTM 实施 Adob​​e Analytics 时发现的一个问题是 S-Object 未定义。enter image description here 原因非常不清楚。您有一个解决方法,我通过提醒 DTM 再次设置 S 对象来使用它。在 DTM 无法识别需要做什么的情况下。

        var s = _satellite.getToolsByType('sc')[0].getS();
        

        对于我的实现,我们使用了在直接调用规则中设置的第三方 JavaScript,并且在其中设置了上述代码。

        解决方案效果很好....

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-11-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-03-26
          • 2015-03-20
          • 1970-01-01
          相关资源
          最近更新 更多