문제

Google 웹 로그 분석이 왜 두 개의 개별 스크립트 태그가 필요한지 아는 사람이 있습니까?

구체적으로, 그들의 지침은 사용자에게 다음과 같은 코드 스 니펫을 추적 목적으로 웹 페이지에 포함하도록 조언합니다.

<!-- Google Analytics -->
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-8720817-1");
pageTracker._trackPageview();
} catch(err) {}</script>

사용자가 다음과 같이 하나의 스크립트 블록 만 사용할 수없는 이유는 다음과 같습니다.

<!-- Google Analytics -->
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
try {
var pageTracker = _gat._getTracker("UA-8720817-1");
pageTracker._trackPageview();
} catch(err) {}</script>
도움이 되었습니까?

해결책

<script> 태그는 순서대로 실행됩니다. ㅏ <script> 이전 제품이 실행되지 않으면 블록을 실행할 수 없습니다.

첫번째 <script> 태그는 Google 생성을 담당합니다 <script> 외부 JS를로드하는 태그. 첫 번째 후 <script> 실행이 완료되면 DOM은 다음과 같습니다.

<script></script> <!-- First Script Tag -->
<script></script> <!-- Google Injected Script -->
<script></script> <!-- Second Script Tag -->

이것은 두 번째를 보장합니다 <script> 태그가 발생할 때까지 실행되지 않습니다 .js 로드가 완료되었습니다. 첫 번째와 두 번째라면 <script> 결합 될 것입니다 _gat 정의되지 않은 변수 (Google이 주입 된 스크립트가 첫 번째 스크립트가 실행될 때까지로드가 시작되지 않으므로).

다른 팁

document.write 코드로 실행 되 자마자 발생합니다. 따라서 "하나의 스크립트 블록"예제를 사용하면 실제 생성 된 소스 코드가 다음과 같습니다.

<!-- Google Analytics -->
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
try {
var pageTracker = _gat._getTracker("UA-8720817-1");
pageTracker._trackPageview();
} catch(err) {}</script>
<script src='http://www.google-analytics.com/ga.js' type='text/javascript'></script>

따라서 var pageTracker = _gat._getTracker("UA-8720817-1"); pageTracker._trackPageview(); 코드는 실패하기 때문입니다 _gat ga.js 파일이로드 될 때까지 정의되지 않습니다.

말이 돼?

첫 번째 블록은 실제로 JavaScript를 사용하여 해당 스크립트 태그를 대체하기 위해 완전히 새 스크립트 태그 인라인을 작성하는 것입니다. 요청중인 페이지에서 "https"를 사용하고 있는지 확인하고 보안 URL을 사용하여 스크립트를 요청하거나 브라우저가 "이 페이지의 일부가 보안 상태가 될 수 있습니다. 항목? " 또는 전혀 전화를 거부하십시오.

두 번째 스크립트 태그가 첫 번째 스크립트 태그에 포함 된 경우, 날아가거나 잘 형성된 스크립트 태그가되지 않으며 코드는 그와 혼합되어야합니다.

이런 식으로, 당신은 모든 호출을 추적하고 속성을 설정하기 위해 자신의 블록에서 깨끗하게 청소하고 HTTP 및 HTTPS를 통해 올바르게 작동 할 수 있습니다.

따라서 페이지가 렌더링되면 첫 번째 스크립트가 실행 된 후 DOM이 다음과 같이 보일 것입니다 (일반 HTTP).

<!-- Google Analytics -->
<script src='http://www.google-analytics.com/ga.js' type='text/javascript'></script>

<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-8720817-1");
pageTracker._trackPageview();
} catch(err) {}</script>

그리고 이것 (https) :

<!-- Google Analytics -->
<script src='https://ssl.google-analytics.com/ga.js' type='text/javascript'></script>

<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-8720817-1");
pageTracker._trackPageview();
} catch(err) {}</script>

자세한 내용은: http://code.google.com/apis/analytics/docs/tracking/gatrackingoverview.html

나는 그것이 사용에 대한 모호한 브라우저 문제를 피하려는 시도라고 생각합니다. document.write 스크립트 태그를 배포하려면

가치가있는 것에 대해, 우리는 Onclick = "pagetracker._trackpageview (%filename%)"메커니즘을 직접 파일 다운로드를 추적하는 메커니즘을 실질적으로 사용하지만 페이지가 완전히로드 될 때까지 실제 페이지 뷰를 추적하고 싶지는 않습니다. 이를 가능하게하려면 페이지 상단에 첫 번째 태그를 포함해야하지만 마지막 _trackpageview () 호출을 끝에 두어야합니다 (음, Var Pagetracker 비트도 많이 사용합니다).

반드시 그런 것은 아닙니다 그들은 그것을 그런 식으로 깨뜨리지 만 우리의 목적에 대해 조금 더 쉽게 만듭니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top