I did try that initially, I wrote the following ga.ext.js file:
var ga = function(){};
It did not work, the name got munged. That's why I used another approach after.
This may be my build process that's broken, but that would surprise me, since I
did manage to write an extern file for the Facebook SDK.
Le dimanche 7 juin 2015 15:14:26 UTC+2, Daniel Kersten a écrit :
> How about writing an extern for the ga function? Presumably the closure
> compiler will prevent name clashes then?
>
>
> On Sun, 7 Jun 2015 13:59 Val Waeselynck <[email protected]> wrote:
> Alright, I managed to get it to work.
>
>
>
> I'm not expert enough in Closure to understand why, but what made it work for
> me was that the function was local-bound, i.e the following didn't work:
>
>
>
> (def ga (aget js/window "ga"))
>
> ;; ... and later in the code
>
> (ga "create" my-account-id "auto")
>
>
>
> However, the following did work:
>
>
>
> (defn ga [& args]
>
> (let [g (aget js/window "ga")]
>
> (apply g args)))
>
> ;; ... and later in the code
>
> (ga "create" my-account-id "auto")
>
>
>
>
>
>
>
> Le dimanche 7 juin 2015 14:47:43 UTC+2, Val Waeselynck a écrit :
>
> > Le jeudi 17 juillet 2014 09:36:02 UTC+2, Thomas Heller a écrit :
>
> > > Hey,
>
> > >
>
> > > the problem is not that closure munges the window.ga function, it is that
> > > closure creates a var named ga which can be anything but is not the
> > > analytics ga. At least it was in my case.
>
> > >
>
> > > My solution was to use the renaming feature of the analytics snippet to
> > > use a name closure won't generate and then call it using aget.
>
> > >
>
> > > Example:
>
> > >
>
> > > Last part of the analytics snippet:
>
> > > (window, document, 'script', '//www.google-analytics.com/analytics.js',
> > > '$MY_GA');
>
> > >
>
> > > Then to call analytics:
>
> > >
>
> > > (let [ga (aget js/window "$MY_GA")]
>
> > > (ga "create" analytics-account-id "auto"))
>
> > >
>
> > > That fixed everything for me.
>
> > >
>
> > > HTH,
>
> > > /thomas
>
> > >
>
> > > On Thursday, July 17, 2014 6:33:28 AM UTC+2, tal giat wrote:
>
> > > > Hi,
>
> > > >
>
> > > > We have clojurescript code calling the google analytics api that is
> > > > created on a regular html page with the usual embed code, like this:
>
> > > >
>
> > > > (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');
>
> > > >
>
> > > > In a clojurescript file we have function to report pageviews like that:
>
> > > >
>
> > > > (defnk init-analytics [analytics-account-id user-id account-id]
>
> > > > (.ga js/window "create" analytics-account-id "auto")
>
> > > > (.ga js/window "set" "&uid" (str user-id))
>
> > > > (.ga js/window "set" "dimension1" (str user-id))
>
> > > > (.ga js/window "set" "dimension2" (str account-id))
>
> > > > (.ga js/window "send" "pageview" (get-page)))
>
> > > >
>
> > > > This works fine without the advanced compilation mode but fails on
> > > > advanced one. This code is being compiled to a munged name, in this
> > > > case window.nc instead of window.ga
>
> > > >
>
> > > > I've tried to add to our extens file (we have other external libraries
> > > > that work fine) the follwoing:
>
> > > > var ga = function(args); but that doesn't help.
>
> > > >
>
> > > > The closure compiler has externs for the analytics api but that seems
> > > > like an old one (old analytics API that is):
>
> > > >
>
> > > > https://github.com/google/closure-compiler/blob/master/contrib/externs/google_analytics_api.js
>
> > > >
>
> > > > Does someone ran into similar problem and can post a solution
>
> > > >
>
> > > > Thanks
>
> >
>
> > Didn't work for me :/
>
>
>
> --
>
> Note that posts from new members are moderated - please be patient with your
> first post.
>
> ---
>
> You received this message because you are subscribed to the Google Groups
> "ClojureScript" group.
>
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
>
> To post to this group, send email to [email protected].
>
> Visit this group at http://groups.google.com/group/clojurescript.
--
Note that posts from new members are moderated - please be patient with your
first post.
---
You received this message because you are subscribed to the Google Groups
"ClojureScript" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/clojurescript.