2017-09-13 1 views
0

https://www.google.com/recaptcha/api.js을 사용하여 Google recaptcha를 통합하고 있습니다. 이 스크립트에는 var s가 있습니다. 우리는 또한 sitecatalyst.js 파일 중 하나에 전역 변수를 가지고 있습니다.Google recaptcha api.js var s 문제

google recaptcha를로드 한 후 var의 s sitecatalyst.js가 api.js의 var로 덮어 쓰여졌습니다.

sitecatalyst의 var s 메소드를 호출 할 때 정의되지 않은 메소드를 얻습니다.

이 충돌을 어떻게 해결할 수 있습니까?

답변

1

첫 번째로 Google 012ap의 이름 공간 충돌이 Adobe Analytics (AA)와 관련이 있지만 google recaptcha api.js 스크립트가 아닙니다. s 거기에 사용 된 네임 스페이스는 익명 함수로 묶여 선언되므로 해당 익명 함수 내에서만 사용할 수 있습니다. 따라서, 귀하의 AA s 개체를 덮어 쓰는 것이 아닙니다. 다른 곳을 보라.

하지만 일반적으로 처음부터 이러한 일이 발생하지 않도록하려면 Adobe Analytics는 기본적으로 글로벌 s (window.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 Dynamic Tag Manager (DTM) 또는 다른 태그로 마이그레이션하지 않은 것 같습니다. 매니저. 이 경우 네임 스페이스를 변경하려면 (네임 스페이스 충돌을 피하기 위해) 태그 관리자로 마이그레이션 할 수있는 기회로 사용하는 것이 좋습니다.

또한이 작업을 수행하고 최신 AppMeasurement 라이브러리에 있지 않은 경우 (특히 AA lib 파일을 직접 호스팅하는 경우 가능성이 높은 기존 H 코드를 사용하는 경우) 코드 라이브러리를 업데이트 할 기회로

+0

답장을 보내 주셔서 감사합니다. Crayon. 나도 알아, 구글 recaptcha의 ananymous 기능하에 따라서 어떤 문제를 생성해서는 안된다하지만 우리는 Google recaptcha api.js 코드를로드 중지하자마자, 우리는 오류가 발생하지 않습니다. – user6896902

+0

이것이 우리가하는 방법입니다. 우리는 var s = s_gi ('some value');가있는 메인 페이지에 sitecatalyst.js를로드합니다.그런 다음 기본 페이지가로드되면 Google recaptcha 코드가있는 다른 페이지의 내용을 가져오고 Ajax 호출에서받은 HTML로 메인 페이지에서 div를 업데이트하는 아약스 호출을 제공합니다. 그 후에 우리가 이벤트를 추가하면 s.apl은 함수가 아닙니다. – user6896902