Подскажите пожалуйста, как лучше объединить 2 куска кода, чтобы не было в JS конфликтов между старыми и новыми компонентами кода.
Есть код GoogleAnalytics который используется сейчас на мобильной версии сайта:
<script type="text/javascript">
function getParameterByName(name) {
name = name.replace(/[\[]/, '\\\[').replace(/[\]]/, '\\\]');
var regexS = '[\\?&]' + name + '=([^&#]*)';
var regex = new RegExp(regexS, 'i');
var results = regex.exec(window.location.search);
if (results == null) {
return '';
} else {
return decodeURIComponent(results[1].replace(/\+/g, ' '));
}
}
var promoId = getParameterByName('promoid');
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-XXXXXXX-X']);
_gaq.push(['_setDomainName', 'domen.ru']);
if (promoId !== '') {
_gaq.push(['_setCustomVar', 1, 'promoId', promoId, 2]);
}
_gaq.push(['_trackPageview']);
(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);
})();
</script>
А вот модифицированный код гугланалитикса для более полной статистики посещений, который нужно добавить к существующему:
<script type="text/javascript">
function getParameterByName(name) {
name = name.replace(/[\[]/, '\\\[').replace(/[\]]/, '\\\]');
var regexS = '[\\?&]' + name + '=([^&#]*)';
var regex = new RegExp(regexS, 'i');
var results = regex.exec(window.location.search);
if (results == null) {
return '';
} else {
return decodeURIComponent(results[1].replace(/\+/g, ' '));
}
}
var promoId = getParameterByName('promoid');
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-XXXXXXX-X']);
_gaq.push(['_setDomainName', 'domen.ru']);
if (promoId !== '') {
_gaq.push(['_setCustomVar', 1, 'promoId', promoId, 2]);
}
_gaq.push(['_initData']);
function readcookie(name) { // функция чтения куки
var re = new RegExp("(?:^| )" + name + "=([^;]*)", "i");
var matches = document.cookie.match(re);
return matches && matches.length == 2 ? matches[1] : "";
};
if (document.referrer.match(/^http[s]?:\/\/(www\.|)domen\.ru/)) {} // переход со страницы нашего сайта - ничего не делаем
else
{
if (document.referrer=='')
{ // нет источника посещения
if (document.cookie.indexOf('__utmz=')) { // проверка существования куки __utmz
var utmz = readcookie('__utmz'); // читаем значение куки
var utmz2 = utmz.replace (/\utmcsr.*/, 'utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)'); // переписываем (даже в случае идентичности)
document.cookie = '__utmz=' + utmz2+'; path=/; domain=.domen.ru'; // обновляем
}
}
else
{
var re2= new RegExp("^http[s]?:\/\/(www\.|)([^\/]*)\/([^\?]*)", "i");
var domenar = document.referrer.match(re2);
var domen=RegExp.$2; var linkref=RegExp.$3;
if (domen.match(/^yandex\./) || domen.match(/^google\./) || domen.match(/^bing\./) || domen.match(/^search\./) || domen.match(/^rambler\./) || domen.match(/^yahoo\./) || domen.match(/^msn\./) || domen.match(/^ask\./) || domen.match(/^aol\./)) {}
else
{
if (document.cookie.indexOf('__utmz=')) {
var utmz = readcookie('__utmz');
var utmz2 = utmz.replace (/\utmcsr.*/, 'utmcsr='+domen+'|utmccn=(referral)|utmcmd=referral|utmcct=/'+linkref+'') ;
document.cookie = '__utmz=' + utmz2+'; path=/; domain=.domen.ru';
}
}
}
}
_gaq.push(['_trackPageview']);
(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);
})();
</script>
Вот, что у меня получилось после объединения кодов:
<script type="text/javascript">
function getParameterByName(name) {
name = name.replace(/[\[]/, '\\\[').replace(/[\]]/, '\\\]');
var regexS = '[\\?&]' + name + '=([^&#]*)';
var regex = new RegExp(regexS, 'i');
var results = regex.exec(window.location.search);
if (results == null) {
return '';
} else {
return decodeURIComponent(results[1].replace(/\+/g, ' '));
}
}
var promoId = getParameterByName('promoid');
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-XXXXXXX-X']);
_gaq.push(['_setDomainName', 'domen.ru']);
if (promoId !== '') {
_gaq.push(['_setCustomVar', 1, 'promoId', promoId, 2]);
}
_gaq.push(['_initData']);
function readcookie(name) { // функция чтения куки
var re = new RegExp("(?:^| )" + name + "=([^;]*)", "i");
var matches = document.cookie.match(re);
return matches && matches.length == 2 ? matches[1] : "";
};
if (document.referrer.match(/^http[s]?:\/\/(www\.|)domen\.ru/)) {} // переход со страницы нашего сайта - ничего не делаем
else
{
if (document.referrer=='')
{ // нет источника посещения
if (document.cookie.indexOf('__utmz=')) { // проверка существования куки __utmz
var utmz = readcookie('__utmz'); // читаем значение куки
var utmz2 = utmz.replace (/\utmcsr.*/, 'utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)'); // переписываем (даже в случае идентичности)
document.cookie = '__utmz=' + utmz2+'; path=/; domain=.domen.ru'; // обновляем
}
}
else
{
var re2= new RegExp("^http[s]?:\/\/(www\.|)([^\/]*)\/([^\?]*)", "i");
var domenar = document.referrer.match(re2);
var domen=RegExp.$2; var linkref=RegExp.$3;
if (domen.match(/^yandex\./) || domen.match(/^google\./) || domen.match(/^bing\./) || domen.match(/^search\./) || domen.match(/^rambler\./) || domen.match(/^yahoo\./) || domen.match(/^msn\./) || domen.match(/^ask\./) || domen.match(/^aol\./)) {}
else
{
if (document.cookie.indexOf('__utmz=')) {
var utmz = readcookie('__utmz');
var utmz2 = utmz.replace (/\utmcsr.*/, 'utmcsr='+domen+'|utmccn=(referral)|utmcmd=referral|utmcct=/'+linkref+'') ;
document.cookie = '__utmz=' + utmz2+'; path=/; domain=.domen.ru';
}
}
}
}
_gaq.push(['_trackPageview']);
(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);
})();
</script>
Помогите пожалуйста проверить код после объединения, не будет ли конфликтов между функциями.