谷歌recaptcha api.js var s问题

时间:2017-09-13 04:18:17

标签: javascript recaptcha adobe-analytics

我们正在使用https://www.google.com/recaptcha/api.js整合google recaptcha。这个脚本里面有var。我们的sitecatalyst.js文件中还有一个全局变量。

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

当调用sitecatalyst的var s方法时,我们得到了未定义的方法。

我们如何解决这一冲突?

1 个答案:

答案 0 :(得分:1)

首先请注意,您使用Adobe Analytics(AA)时遇到的s命名空间冲突不是来自google recaptcha api.js脚本。其中使用的s命名空间在匿名函数中包含并声明,因此其范围仅在该匿名函数内。所以,这不是覆盖你的AA s对象的东西;看别处。

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

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

var s = s_gi('some value');

或者这个:

var s = new AppMeasurement();

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

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

您需要确保在您设置AA变量的任何地方更新它,例如页面自定义变量,s.t()页面查看调用等。

由于您在讨论js文件中的库,听起来您还没有迁移到Adobe Dynamic Tag Manager(DTM)或其他标记管理器。如果是这种情况,并且您想要更改命名空间(您应该,以避免命名空间冲突),那么我建议将此作为迁移到标记管理器的机会。

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