이와 관련된 비슷한 이슈를 살펴보는 두 개의 글이 있습니다.

첫째, Google Analytics는 Pete Higgins씨가 살펴본 것과 같이 보통 응용프로그램이 멈춰 대기하게 되는 스크립트 태그를 사용합니다.

그래서 "google-anaytics.com 을 기다리는 중..." 과 같은 글을 보아왔었습니다.
이것은 보통 body 태그가 닫히기 전에 있어, Dojo의 addOnLoad 함수가 ga.js가 읽히고 실행되기 전까지 대기하도록 합니다. 저는 SitePen의 Dojo QuickStart 가이드에서 그것을 알게되었습니다. 모든 가이드는 유효한 HTML과 CSS 이고, 커스텀 탭 뷰와 간단한 네비게이션으로 주요 섹션을 구분하고 있습니다. 안타깝지만, 그런 역할을 하는 모든 코드는 addOnLoad 함수내에서 실행됩니다. 그래서, Tennesse의 제 비천한 인터넷 망은 ga.js가 읽히는데 5초 이상 걸리게 하더군요. 요컨데, 때때로 저는 탭이 추가되고 선택되지 않은 탭이 사라짐에 따라 화면이 짜증나게 흔들리며 렌더링되는 것을 경험합니다.

저는 script 태그를 head 엘리먼트에 추가하고 그 코드를 Google의 코드가 준비되는 것과는 상관없이 Dom 이 준비되자마자 남은 코드를 실행할 수 있도록 하면서 onLoad 에서 실행하는 것이 안전하리라 판단했습니다.
그는 코드를 보여주었습니다:
[code:js]
dojo.provide("dojox.analytics.ga");
dojo.mixin(dojox.analytics.ga, {
        // _acct: String
        //            your GA urchin tracker account numbers.
        _acct: dojo.config.urchin || "",
 
        // _loadInterval: Integer
        //           time in ms to wait between checking again
        _loadInterval: 420,
 
        _loadGA: function(){
                // summary: load the ga.js file and begin initialization process
                var gaHost = ("https:" == document.location.protocol) ? "https://ssl." : "http://www.";
                var s = dojo.doc.createElement('script');
                s.src = gaHost + "google-analytics.com/ga.js";
                dojo.doc.getElementsByTagName("head")[0].appendChild(s);
                setTimeout(dojo.hitch(this, "_checkGA"), this._loadInterval);
        },
 
        _checkGA: function(){
                // summary: sniff the global _gat variable Google defines.
                //           if it exists, run _gotGA, otherwise, do another interval
                setTimeout(dojo.hitch(this, window['_gat'] ? "_gotGA" : "_checkGA"), this._loadInterval);
        },
 
        _gotGA: function(){
                // summary: initialize the tracker, we've got ga.js loaded
                var ga = this._tracker = dojo.hitch(_gat, "_getTracker", this._acct)();
                ga._initData();
                ga._trackPageview();
                this.GAonLoad.apply(this, arguments);
        },
 
        GAonLoad: function(){
                // stub function to fire when urchin is complete
                // you also have access in this function to this._tracker, which is the
                // root tracker instance you called _initData() on
        }
 
});
 
// start it all up after body is ready:
dojo.addOnLoad(dojox.analytics.ga,"_loadGA");
이것은 Dojo 에서 곧 제공될 예정입니다, 그러면 이렇게 사용하실 수 있게 됩니다:
[code:js]
var pagetracker = new dojox.analytics.Urchin({ ua: "UA-123456-7" });
pagetracker.trackPageView("/ajaxy-notification");

둘째, Weston Ruter씨는 인라인 script 태그에 document.write()를 사용하는 Google AdSense와 AJAX 라이브러리 API를 같이 사용할 때 일어나는 다른 문제를 알려주셨습니다. 예전에 John Resig 씨가 document.write 대신 DOM 작업을 하는 작은 래퍼를 작성하신 적이 있습니다. Weston 씨는 그것에 기초하여 작성했습니다.

전체 코드를 확인해보세요.

from Google Anaytics after onLoad and document.write for XHTML
Posted by 행복한고니 트랙백 0 : 댓글 0

댓글을 달아 주세요