2

내가 꽤 표준 흐름을 작동하는 Google 웹 로그 분석 - 억양 플랫폼을 짓고 있어요 :Google 유니버설 애널리틱스 태그를 사용하면 스크립트가로드되는 동안 메소드 호출을 어떻게 할 수 있습니까?

  1. 사용자 수 및 고유 계정 매개 변수와 JS 스 니펫 (snippet)을 구성합니다.
  2. 웹 사이트에이 JS 스 니펫을 포함시켜 주 라이브러리를 비동기 적으로로드합니다.
  3. 라이브러리가로드 된 후 사용자는 데이터를 내 웹 앱에 보내는 메소드라고 부를 수 있습니다.

는 여러 회사가 위의 흐름을 처리하는 방법의 몇 가지 다른 구현을 조사한 후, 나는 구글의 새로운 Universal Analytics tag는 다음과 같은 이유로 가장 우아한 실행이 나타나는 것을 발견 :

에 사용자를 허용하는 것 주 라이브러리가 비동기식으로을로드하는 동안 메소드 호출을 수행합니다. 모두 <script type="text/javascript"> 태그 내에 있습니다.

이의 예는 직선에있는 Quick Start Code :

<!-- Google Analytics --> 
<script> 
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 
})(window,document,'script','//www.google-analytics.com/analytics.js','ga'); 

ga('create', 'UA-XXXX-Y', 'auto'); 
ga('send', 'pageview'); 

</script> 
<!-- End Google Analytics --> 

I 메인 익명 함수는 여전히 아마도 DOM을 조작하고 삽입하는 동안은 사용자가 ga('create' ...)ga('send' ...)를 호출 할 수 있습니다 방법을 이해하기 위해 노력하고있어/analytics.js 스크립트 다운로드

위의 패턴이 어떻게 작동하는지 아는 사람이 있습니까?

축소 된 코드를 리버스 엔지니어링하려는 시도는 기본 라이브러리가로드 될 때까지 메시지 대기열로 효과적으로 작동하는 빈 ga 개체를 생성하고 있음을 나타냅니다. 그런 다음 라이브러리가로드되면 큐 객체를 구문 분석하고 수행해야 할 작업을 수행합니다 (라이브러리가로드 된 경우 실제로 작업을 수행 할 수 있기 때문에).

모든 코드를 리버스 엔지니어링하기가 약간 까다 롭습니다. 위의 내용이 정확한지 100 % 확신 할 수 없습니다.

나는 라이브러리가로드되기 전에 ga("send" ...)과 같은 메서드에 의해 호출되는 모든 데이터를 저장하기 위해 window.tempDataWhileLibraryHasntLoaded 개체를 사용하여 비슷한 구현을 만들었습니다. 라이브러리는이 개체를 구문 분석하고 필요한 개체를 처리 한 다음 개체를 null로 만듭니다. 그러나 이것은 Google의 구현처럼 깨끗하지는 않습니다. ,

window.GoogleAnalyticsObject = 'ga'; 

window.ga = window.ga || function(){ 
    (window.ga.q = window.ga.q || []).push(arguments); 
} 

window.ga.l = 1 * new Date(); 

그들은 window.ga을 만들고 배열로 인수를 밀어 함수에 할당 :

답변

3

는 그래서 축소 된 스크립트를 탈피, 그것은 (제거 스크립트 태그를 삽입하는 코드와)과 같습니다 window.ga.q. || 또는 운영자는 이미 작성된 항목을 덮어 쓰지 않도록 할 수 있습니다.

ga('foo', 'bar')을 호출하면 단순히 해당 인수가 배열에 저장됩니다. 스크립트가로드되면 window.ga.q 어레이를 찾고 'foo'및 'bar'를 찾고로드 된 스크립트에서 해당 함수를 호출하여 값을 반복합니다.

+0

감사의 말, 완벽한 설명! – dbau