Вероятно, бесполезно для ОП, но просто потратил целый день, работая над этим, так что, надеюсь, мое решение спасет кого-то другого в этот раз.
Таким образом, причина, по которой код ga.js не может использоваться непосредственно из приложения AIR, написанного на javascript, заключается в том, что AIR не будет устанавливать cookie для страниц, которые хранятся в самом приложении. Чтобы обойти это, я скачал ga.js в приложение и изменил его так, чтобы он не полагался на функцию document.cookie.
В приложении у меня есть:
<script type="text/javascript">
var cookies = {};
document.__defineSetter__('_cookie', function(c) {
var epos = c.indexOf('=');
var spos = c.indexOf(';', Math.max(0, epos));
if (epos == -1 || spos == -1) { return; }
var name = c.substring(0, epos);
var value = c.substring(epos + 1, spos);
cookies[name] = value;
});
document.__defineGetter__('_cookie', function() {
var a = [];
for (var name in cookies) {
a.push(name + '=' + cookies[name]);
}
return a.join('; ');
});
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-XXXXXX-1']);
_gaq.push(['_trackPageview', path])
(function() {
var ga = document.createElement('script');
ga.type = 'text/javascript';
ga.async = true;
// custom GA code which uses document._cookie instead of
// document.cookie
ga.src = 'js/ga.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
})();
</script>
В идеале, мы могли бы переопределить метод cookie, но, к сожалению, это не представляется возможным в веб-наборе, реализованном для AIR. Поэтому в ga.js я заменил все экземпляры J.cookie на J._cookie. Как только это будет сделано, ga.js должен поверить, что он пишет куки и работает нормально.
В целях полного раскрытия я фактически получаю доступ к вышеуказанному аналитическому коду через iframe, но, поскольку ga.js обслуживается локально, я подозреваю, что он больше не нужен и не хотел усложнять решение, добавляя мост. логика.