【问题标题】:google recaptcha api.js var s issue谷歌recaptcha api.js var的问题
【发布时间】:2018-02-21 15:32:56
【问题描述】:

我们正在使用 https://www.google.com/recaptcha/api.js 集成 google recaptcha。该脚本中有 var 。我们的 sitecatalyst.js 文件之一中还有一个全局变量。

我们遇到了一个问题,在加载 google recaptcha 后,sitecatalyst.js 的 var 被 api.js 的 var 覆盖。

调用sitecatalyst的var的方法时得到未定义的方法。

我们如何解决这个冲突?

【问题讨论】:

    标签: javascript recaptcha adobe-analytics


    【解决方案1】:

    首先请注意,无论您与 Adob​​e Analytics (AA) 发生的任何 s 命名空间冲突,都不是来自 google recaptcha api.js 脚本。其中使用的s 命名空间被封闭并声明在一个匿名函数内,因此它的范围仅在该匿名函数内。所以,这不是覆盖您的 AA s 对象的原因;看看别处。

    但总的来说,就首先避免这种情况发生而言。是的,Adobe Analytics 默认使用全局 s (window.s) 命名空间。

    根据您的库版本,您应该在代码中看到如下内容:

    var s = s_gi('some value');

    或者这个:

    var s = new AppMeasurement();

    您可以在此处更改主 AA 对象命名空间。

    您还需要将 references 更新为代码中其他位置的 s 命名空间。首先,如果您使用任何 AA 插件(例如 s.getQueryParams.getValOnce 等),您需要更新它们以引用您的新命名空间。注意:您只需要更新声明插件的命名空间,而不是其中的代码。大多数插件在它们的开头都有var s=this;之类的东西不要改变这个。这是插件本身的范围,类似于我上面提到的 google api.js 脚本。

    您需要确保它在您设置 AA 变量的其他任何地方都得到更新,例如页面上的自定义变量、s.t() 页面浏览量调用等。

    由于您在谈论 js 文件中的库,听起来您还没有迁移到 Adob​​e 动态标签管理器 (DTM) 或其他一些标签管理器。如果是这种情况,并且您想要更改名称空间(您应该更改名称空间以避免名称空间冲突),那么我建议您以此为契机迁移到标签管理器。

    另外,如果您要执行此操作并且不在最新的 AppMeasurement 库中(尤其是如果您使用的是旧版 H 代码,如果您仍然自己托管 AA lib 文件,则很有可能),我建议使用它作为有机会更新您的代码库。

    【讨论】:

    • 感谢蜡笔的回复。我知道,google recaptcha 是在 ananymous 功能下,因此不应该产生任何问题,但是一旦我们停止加载 google recaptcha api.js 代码,我们就不会收到任何错误。
    • 我们就是这样做的。我们在具有 var s = s_gi('some value'); 的主页上加载 sitecatalyst.js。然后在主页被加载后,我们进行 ajax 调用以获取另一个页面的内容,该页面具有 google recaptcha 代码,并使用从 ajax 调用收到的 html 更新主页中的 div。之后,如果我们添加事件,我们会得到 s.apl is not a function。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 2022-06-16
    • 2018-03-19
    • 2015-02-25
    • 2017-05-19
    • 1970-01-01
    相关资源
    最近更新 更多