27

비동기 버전의 Google Analytics 추적 코드를 웹 사이트에 추가하려고합니다.외부 JS 파일의 Google Analytics 비동기 코드 사용

자바 스크립트를 별도의 파일로 유지하고 거기에서 호출하고 싶습니다. 여기

내가 현재 내의 .js 파일에있어 무엇 :

function addLoadEvent(func) { 
    var oldonload = window.onload; 
    if (typeof window.onload != 'function') { 
     window.onload = func; 
    } else { 
     window.onload = function() { 
      oldonload(); 
      func(); 
     } 
    } 
} 

function loadtracking() { 
    var _gaq = _gaq || []; 
     _gaq.push(['_setAccount', 'UA-XXXXXXX-X']); 
     _gaq.push(['_trackPageview']); 

     (function() { 
      var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; 
      ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; 
      var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); 
     })(); 
} 

addLoadEvent(loadtracking); 

을 그리고 여기 내 마스터 페이지의 <head> 태그에있어 무엇 : 그러나

<script type="text/javascript" src="js/google-analytics.js" ></script> 

, 거기에 분명히 문제가 며칠 후, 나는 통계를 얻지 못하고있다!

내가 바꿀 필요가있는 아이디어가 있습니까?

감사합니다, 닐


편집 : 좋아요 ... 다음과 같은 몇 가지 피드백 후, 나는 내의 .js 파일의 새로운 현재 내용을 추가하겠습니다. 나는 그것을 계속 업데이트 할 것이므로 만약 이것이 풀리면 다른 사람들이 비슷한 일을 시도하는 데 도움이 될 것입니다.

var _gaq = _gaq || []; 

function loadtracking() { 
     window._gaq.push(['_setAccount', 'UA-XXXXXXX-X']); 
     window._gaq.push(['_trackPageview']); 

     (function() { 
      var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; 
      ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; 
      var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); 
     })(); 
} 

loadtracking(); 
+0

문제가 해결 되었습니까? .js 파일에서 var _gaq를 전역 적으로 정의 했어도 동일한 문제가 발생합니다. 감사. –

+0

내가 기억하는 한, 그렇습니다. 솔직히, 대부분의 응용 프로그램에 대해서는 아래 조언을 따르고 코드를 문서에 직접 삽입하는 것이 좋습니다 ...이 특정 프로젝트에서는 별도의 파일에 있어야한다는 요구 사항이었습니다. 너와 함께한 사건. – NeilD

+0

저는 많은 비슷한 스레드를 읽고 있었기 때문에 사람들이 스크립트를로드하는 데 약간의 지연이있을 수 있다는 것 외에 다른 문제는 없다고 말한 반면 다른 사람들은 내 인생을 망치고 지옥을 정죄한다고 말했습니다. 보려는 페이지에 따라 dif 값을 전달해야하며 웹 사이트의 모든 페이지가 아닌 단일 파일에 코드 변경 사항을 유지하려고합니다.잘 작동하는 것처럼 보이지만, 만났던 문제를 기억할 수 있으면 알려주세요. 고맙습니다. –

답변

22

귀하의 "var _gaq"은 (는) 기능 안에 있습니다. 즉, 해당 기능 내에서 로컬 범위가 지정되며 전 세계적으로 존재하지 않습니다. GA는 글로벌 변수 인 _gaq에 의존합니다. 이와 같은 함수 안에 유지하려면 window._gaq로 참조하십시오.

+2

** 감사합니다 ** 나는 var _gaq를 즉시 제 기능 밖으로 옮겼습니다! – Airn5475

+0

감사! 이 문제도 해결되었습니다 :) –

14

완전히 비동기 추적 코드의 요점을 놓치십시오. 이전의 동기식 GA를 포함하는 것과 똑같기 때문에 외부 파일에 두지 마십시오.

추적 코드가 너무 늦게 연기 될 수 있으므로 window.onload으로 추적 코드를 연기하지 않는 것이 가장 중요합니다.

비동기 GA 을 사용하는 경우 문서 상단에 인라인 스크립트 태그을 넣으십시오. 이 권장Google Analytics website입니다.

는 다른 스크립트 후, 당신의 페이지의 <head> 섹션의 하단에 페이지를 비동기 코드 조각을 삽입하거나 템플릿을 사용할 수 있습니다.

+0

AddLoadEvent() 코드에 대한 귀하의 요점을 이해하고, 모든 window.onload 부분을 제거했습니다. :) 외부 파일이 어떻게 만들어 질지에 대해 좀 더 깊이 들어가기를 바랍니다. "이전 동기 GA 포함과 정확히 같습니다." 별도의 파일로 분할하면 왜 다르게 실행됩니까? 추천서를 읽었지만이 프로젝트에서 GA 코드가 마스터 페이지와 분리되어 있어야합니다. – NeilD

+3

비동기 추적 기능을 사용하면 코드가로드되기 전에 이벤트를 GA로 푸시 시작할 수 있다는 큰 이점이 있습니다. 페이지에서 요소를 _gaq 배열로 푸시하자 마자 이벤트 저장을 시작할 수 있습니다. 반대로, 변수를 주 스크립트 외부로 강제로 가져 오면 외부 스크립트가 다운로드 될 때까지 추적을 기다리게됩니다. 그것이 이전 스크립트와 정확히 같은 방식입니다. –

+0

마찬가지로, window.onload <---를 ​​통해 onload 함수가 실행될 때까지 이벤트를 기다리도록 강요하면 모든 이미지가 다운로드 될 때까지 더 오래 기다려야합니다. 지체 된 파일이 끊기는 경우 어떻게할까요? –