Javascript-форум (https://javascript.ru/forum/)
-   Работа (https://javascript.ru/forum/job/)
-   -   Мелкая правка кода JS (https://javascript.ru/forum/job/35143-melkaya-pravka-koda-js.html)

refer5 31.01.2013 18:25

Мелкая правка кода JS
 
Здравствуйте.
Нужно поправить код JS
Вот исходник
01	<script type="text/javascript">
02	 
03	  function getParameterByName(name) {
04	    name = name.replace(/[\[]/, '\\\[').replace(/[\]]/, '\\\]');
05	    var regexS = '[\\?&]' + name + '=([^&#]*)';
06	    var regex = new RegExp(regexS, 'i');
07	    var results = regex.exec(window.location.search);
08	    if (results == null) {
09	      return '';
10	    } else {
11	      return decodeURIComponent(results[1].replace(/\+/g, ' '));
12	    }
13	  }
14	 
15	  var promoId = getParameterByName('promoid');
16	 
17	   var _gaq = _gaq || [];
18	  _gaq.push(['_setAccount', 'UA-XXXXXXX-X']);
19	 
20	 
21	  _gaq.push(['_setDomainName', 'domen.ru']);
22	  if (promoId !== '') {
23	    _gaq.push(['_setCustomVar', 1, 'promoId', promoId, 2]);
24	  }
25	   
26	_gaq.push(['_initData']);
27	  
28	        function readcookie(name) { // функция чтения куки
29	                var re = new RegExp("(?:^| )" + name + "=([^;]*)", "i");
30	                var matches = document.cookie.match(re);
31	                return matches && matches.length == 2 ? matches[1] : "";
32	        }; 
33	 
34	  if (document.referrer.match(/^http[s]?:\/\/(www\.|)domen\.ru/)) {} // переход со страницы нашего сайта - ничего не делаем
35	  else
36	        {
37	          if (document.referrer=='') 
38	          { // нет источника посещения
39	                  if (document.cookie.indexOf('__utmz=')) { // проверка существования куки __utmz
40	                  var utmz = readcookie('__utmz'); // читаем значение куки
41	                  var utmz2 = utmz.replace (/\utmcsr.*/, 'utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)'); // переписываем (даже в случае идентичности)
42	                  document.cookie = '__utmz=' + utmz2+'; path=/; domain=.domen.ru'; // обновляем
43	                  }
44	          }
45	          else
46	          {
47	                 var re2= new RegExp("^http[s]?:\/\/(www\.|)([^\/]*)\/([^\?]*)", "i");
48	                 var domenar = document.referrer.match(re2);
49	                 var domen=RegExp.$2;  var linkref=RegExp.$3;
50	                 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\./)) {}
51	                 else
52	                 {
53	                          if (document.cookie.indexOf('__utmz=')) {
54	                          var utmz = readcookie('__utmz');
55	                          var utmz2 = utmz.replace (/\utmcsr.*/, 'utmcsr='+domen+'|utmccn=(referral)|utmcmd=referral|utmcct=/'+linkref+'') ;
56	                          document.cookie = '__utmz=' + utmz2+'; path=/; domain=.domen.ru';
57	                          }
58	                 }
59	          }
60	        }
61	 
62	  _gaq.push(['_trackPageview']);
63	 
64	  (function() {
65	    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
66	    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
67	    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
68	  })();
69	 
70	 
71	</script>



Нужно поправить правило в строке 34 для мобильной версии сайта и обычной. Ну или может еще гдето подправить в коде.

Т.е. нужно правило - если рефер НАШ домен или поддомен - domen.ru , m.domen.ru, то ничего не делаем
34 if (document.referrer.match(/^http[s]?:\/\/(www\.|)domen\.ru/)) {} // переход со страницы нашего сайта - ничего не делаем

У нас 2 шапки для мобильной и обычной версии и там используется этот код. Нужно общее правило для вставки кода в обе шапки, чтобы был указан домен-поддомен - при заходе с которых ничего не менялось бы в кукисах, чтобы мы не путались в статистике Гугл аналитикса при переходах с мобильной на обычную версию и наоборот.

Пдскажите кто возьмется и сколько это будет стоить.

refer5 01.02.2013 00:50

не совсем понимаю как правильно прописать все в 34 строке, чтобы учитывался домен и поддомен. В остальном коде можно не править, достаточно указанную строчку.

nerv_ 01.02.2013 02:14

попробуйте так http://learn.javascript.ru/play/t8Bwuc

refer5 01.02.2013 03:20

ок, спасибо попробую

rgl 01.02.2013 16:49

Цитата:

Сообщение от nerv_ (Сообщение 230841)
попробуйте так http://learn.javascript.ru/play/t8Bwuc

Легко обманывается, напр. неправильно сработает при таком referrer:
http: //www.somesite.ru/test.html?javascript.ru

rgl 01.02.2013 17:16

Попробуйте:
/^https?:\/\/([^?\/.]+\.)*javascript\.ru($|[?#\/])/

nerv_ 01.02.2013 17:51

Цитата:

Сообщение от rgl
Легко обманывается

1. делал это на скорую руку
2.
Цитата:

Сообщение от rgl
Попробуйте:
/^https?:\/\/([^?\/.]+\.)*javascript\.ru($|[?#\/])/

попробуй подставь эту регу в пример по моей ссылке
3. на мой взгляд не правильно пытаться решить эту задачу в одну регу
а) отсекаем основной адрес
http://learn.javascript.ru/forum/job...a-koda-js.html -> http://learn.javascript.ru
б) смотрим, что на конце

*примерно так

rgl 01.02.2013 18:04

Цитата:

Сообщение от nerv_ (Сообщение 230937)
2. попробуй подставь эту регу в пример по моей ссылке

Подставил. Все работает если добавить в урлы недостающие http://
В referrer http:// всегда есть, даже когда пришли с того же домена, так что на это можно (и нужно) рассчитывать, иначе, если проверять адрес не с самого начала, то где гарантия что мы найдем часть доменного имени, а не имя локального файла?

рони 01.02.2013 18:09

мной был предложен такой вариант для основного и мобильного, но понял ли меня ТС незнаю
alert(!!"http://www.somesite.ru/test.html?javascript.ru".match(/^http[s]?:\/\/(www\.|)(learn\.|)javascript\.ru/))
alert(!!"http://www.javascript.ru".match(/^http[s]?:\/\/(www\.|)(learn\.|)javascript\.ru/))
alert(!!"http://learn.javascript.ru".match(/^http[s]?:\/\/(www\.|)(learn\.|)javascript\.ru/))

rgl 01.02.2013 18:30

А зачем буковка s после http в квадратных скобках?

рони 01.02.2013 18:34

Цитата:

Сообщение от rgl
А зачем буковка s после http в квадратных скобках?

можно и без скобок

nerv_ 01.02.2013 18:38

rgl, понятно

мой вариант http://learn.javascript.ru/play/nRow5b

rgl 01.02.2013 18:44

Цитата:

Сообщение от nerv_ (Сообщение 230949)

Примеры обманных урлов:
'http://www.somesite.ru/javascript.ru'
'http://javascript.ru.somesite.ru'

nerv_ 01.02.2013 19:17

Цитата:

Сообщение от rgl
Примеры обманных урлов:
'http://www.somesite.ru/javascript.ru'
'http://javascript.ru.somesite.ru'

ты заставляешь меня набирать буквы и смотреть в отладчик :)

alert( foo( 'http://www.somesite.ru/test.html?javascript.ru' ) );
alert( foo( 'http://learn.javascript.ru/forum' ) );
alert( foo( 'www.learn.javascript.ru/forum' ) );
alert( foo( 'http://javascript.ru/' ) );


function foo( url ) {
    compare = 'javascript';
    url = url.replace( /^[^:]+:../, '' )
              .replace( /\/.*/, '' )
              .split( '.' );

    return url[ url.length - 2 ] === compare;
}

rgl 01.02.2013 19:45

Цитата:

Сообщение от nerv_ (Сообщение 230962)
ты заставляешь меня набирать буквы и смотреть в отладчик :)

alert( foo( 'http://www.somesite.ru/test.html?javascript.ru' ) );
alert( foo( 'http://learn.javascript.ru/forum' ) );
alert( foo( 'www.learn.javascript.ru/forum' ) );
alert( foo( 'http://javascript.ru/' ) );


function foo( url ) {
    compare = 'javascript';
    url = url.replace( /^[^:]+:../, '' )
              .replace( /\/.*/, '' )
              .split( '.' );

    return url[ url.length - 2 ] === compare;
}

:no:

Еще обманный урл: "http://somesite.ru?www.javascript.ru"
А вот несправедливо забракованный: "http://javascript.ru?somesite.ru"

nerv_ 01.02.2013 21:24

rgl, еще варианты будут? :)
alert(
    [
        'http://www.somesite.ru/test.html?javascript.ru',
        'http://www.javascript.ru',
        'http://learn.javascript.ru',
        'http://www.somesite.ru/javascript.ru',
        'http://javascript.ru.somesite.ru',
        'http://www.somesite.ru/test.html?javascript.ru',
        'http://learn.javascript.ru/forum',
        'www.learn.javascript.ru/forum',
        'http://javascript.ru',
        'http://somesite.ru?www.javascript.ru',
        'http://javascript.ru?somesite.ru'
    ]
    .map( function( url ) { return foo( url ); })
    .join( '\n' )
);


function foo( url ) {
    url = url.replace( /^[^:]+:../, '' )
              .replace( /[?\/].*/, '' )
              .split( '.' );

    return url[ url.length - 2 ] === 'javascript';
}


Часовой пояс GMT +3, время: 02:46.