2017-09-13 64 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