Index: googleanalytics.js =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/google_analytics/googleanalytics.js,v retrieving revision 1.3.2.8 diff -u -r1.3.2.8 googleanalytics.js --- googleanalytics.js 4 Mar 2009 07:25:47 -0000 1.3.2.8 +++ googleanalytics.js 19 Jun 2009 17:28:12 -0000 @@ -2,8 +2,15 @@ Drupal.behaviors.gaTrackerAttach = function(context) { - // Attach onclick event to all links. - $('a', context).click( function() { + // Attach an onclick event to body tag. Clicks on links will "bubble up". + // This approach is more efficient than attaching to each link, since + // all the links can share one handler. + $('body', context).click( function(e) { + if (e.target.tagName.toLowerCase() != 'a') { + return; + } + + var link = e.target; var ga = Drupal.settings.googleanalytics; // Expression to check for absolute internal links. var isInternal = new RegExp("^(https?):\/\/" + window.location.host, "i"); @@ -14,26 +21,26 @@ try { // Is the clicked URL internal? - if (isInternal.test(this.href)) { + if (isInternal.test(link.href)) { // Is download tracking activated and the file extension configured for download tracking? - if (ga.trackDownload && isDownload.test(this.href)) { + if (ga.trackDownload && isDownload.test(link.href)) { // Download link clicked. - var extension = isDownload.exec(this.href); - pageTracker._trackEvent("Downloads", extension[1].toUpperCase(), this.href.replace(isInternal, '')); + var extension = isDownload.exec(link.href); + pageTracker._trackEvent("Downloads", extension[1].toUpperCase(), link.href.replace(isInternal, '')); } - else if (isInternalSpecial.test(this.href)) { + else if (isInternalSpecial.test(link.href)) { // Keep the internal URL for Google Analytics website overlay intact. - pageTracker._trackPageview(this.href.replace(isInternal, '')); + pageTracker._trackPageview(link.href.replace(isInternal, '')); } } else { - if (ga.trackMailto && $(this).is("a[href^=mailto:]")) { + if (ga.trackMailto && $(link).is("a[href^=mailto:]")) { // Mailto link clicked. - pageTracker._trackEvent("Mails", "Click", this.href.substring(7)); + pageTracker._trackEvent("Mails", "Click", link.href.substring(7)); } else if (ga.trackOutgoing) { // External link clicked. - pageTracker._trackEvent("Outgoing links", "Click", this.href); + pageTracker._trackEvent("Outgoing links", "Click", link.href); } } } catch(err) {}