Why does Google Analytics dynamically inject javas

2019-01-28 04:14发布

问题:

Why do I need to use:

(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();

Instead of:

<script async="true" type="text/javascript" src="http://www.google-analytics.com/ga.js"></script>

The only reason I can see is that they have a different subdomain for SSL. If it weren't for that is there any reason to use this script injection technique?

回答1:

  1. Being able to serve out http or https depending on the protocol of the parent page is one reason.

  2. As the script is injected via a script tag inserted via running JS code, it does not block page loading. This is another reason. But this can very well be achieved via the new HTML5 async attribute too (but this is not compatible with older browsers - and GA absolutely needs to be compatible with pretty much all of them)