2017-09-13 98 views
0

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

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

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

我们该如何解决这个冲突?

回答

1

首先需要注意的是,不管s命名空间与Adobe Analytics(AA)的冲突如何,都不是来自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.getQueryParam,s.getValOnce等),您需要更新它们以引用您的新名称空间。注意:您只需更新声明的插件的名称空间,而不是其中的代码。大多数插件,在他们的开始,他们有像var s=this;不改变这个。这是在插件本身范围内,类似于我上面提到的google api.js脚本。

您需要确保在任何其他地方设置了AA变量,例如,页面访问的s.t()调用

由于您正在讨论js文件中的库,这听起来像您还没有迁移到Adobe动态卷标管理器(DTM)或其他标记经理。如果是这种情况,并且您想要更改命名空间(您应该避免命名空间冲突),那么我建议使用此作为迁移到标签管理器的机会。如果你打算这样做,而不是最新的AppMeasurement库(特别是如果你使用的是旧H代码,如果你仍然自己托管AA lib文件的话很可能),我推荐使用这个作为更新您的代码库的机会。

+0

感谢您的答复蜡笔小新。我知道,谷歌recaptcha的是在ananymous功能,因此不应该产生任何问题,但只要我们停止加载谷歌recaptcha api.js代码,我们没有得到任何错误。 – user6896902

+0

这就是我们如何做的。我们在var s = s_gi('some value');主页上加载sitecatalyst.js。然后,在主页面加载完成后,我们给ajax调用以获取其他页面的内容,该页面包含google recaptcha代码,并使用从ajax调用收到的html更新主页面中的div。之后,如果我们添加事件,我们得到s.apl不是一个函数。 – user6896902