Архив метки: javascript

JavaScript: строка в число

На JavaScript в отличие от PHP нет «ленивого» перевода строки в число «одной строчкой». Их нужно чуть больше ;), а именно две:

cur=Number.parseInt("10");
if (Number.isNaN(cur)){cur=0;};
console.log("-а ввели: "+cur);

Зачем? А чтобы закрыть случай, когда строка совсем не число. PHP по умолчанию вернул бы 0, а JavaScript возвращает Nan.

Убираем из URL адресной строки на странице сайта лишнее

Задача: убрать из адресной строки страницы сайта открытой по ссылке из поисковика Яндекса, «лишнюю» информацию, которая идет «прицепом» от яндекса.

Решение:

<script>    
function UrlBrowserYandexCuter(){
   path=document.location.pathname.split("yclid");
   path=path[0];
   search=document.location.search.split("yclid");;
   search=search[0];
   hash=document.location.hash.split("yclid");;
   hash=hash[0];
   url=path+search+hash;
   if (url.slice(-1)=="?"){
    url=url.substring(0, url.length - 1);   
   };
   history.replaceState(null,null, url);
};
UrlBrowserYandexCuter();
</script>

Копирование в буфер обмена на JavaScript

В JavaScript скопировать в буфер обмена можно только то что находится внутри тега <input>. Потому приходиться для копирования в буфер обмена произвольного текста приходиться идти на ухищрения в виде например временного помещения текста для копирования в input. Например как-то так:

<span style='cursor: pointer;' id='ipsegsw'>192.168.1.1</span>
<script>
$('#ipsegsw').click(function() {
	    var $temp = $("<input>");
	    $("body").append($temp);
	    $temp.val($('#ipsegsw').text()).select();
	    document.execCommand("copy");
	    $temp.remove();
            console.log('IP скопирован в буфер обмена');
});
</script>

Удаляем кукисы, время жизни которых более заданного

Задача: есть сайт, на котором кукисы устанавливаются движком. Где не известно. Настроек нет (или есть, но лень-не кому копаться). Необходимо принудительно сократить время жизни куков до заданного.

Решение:

Из сложных нюансов: браузер не позволяет читать время истечения жизни (и путь) установленных кукисов. От слова никак и вообще. Защита такая..

Ну если с путем всё в принципе не так важно — просто вставлять код трущий кукисы на КАЖДОЙ странице, а не только на «начальной», то кукисы прочитаются, то со временем жизни возможен только «хук».  А именно: читаем все куки. Записываем все ключи куков в локасторадж браузера с датой истечения сегодня+(какое-то количество дней). При следующем открытии страницы — проверяем дату истечения в сторадже. Если меньше текущей — трем кукисы.

Код:

dayssavecookies=7;    
function deleteLCookie(name) {
    document.cookie.split(";").forEach(function(el) {
        if(!el.indexOf(name)) {
	    var date = new Date(0);
            document.cookie = el + "=; path=/; expires=" + date.toUTCString();
	   }
	});
}    
function getAllCookies(){
  var pairs = document.cookie.split(";");
  var cookies = {};
  for (var i=0; i<pairs.length; i++){
    var pair = pairs[i].split("=");
    cookies[(pair[0]+'').trim()] = unescape(pair.slice(1).join('='));
  }
  return cookies;
}    
// получаю текущие куки браузера
cooks_values=getAllCookies();
// получаю текущие сохраненные в сторадже куки - даты
  if (localStorage["cooks_dates"]==undefined){
      ls_dates=new Map();
  } else {
    ls_dates=JSON.parse(localStorage["cooks_dates"]) 
  };
// если кука в сторадже нет, то добавляю, если истек - ту удаляю и из стораджа и из куков
for (key in cooks_values) {
    console.log(key);
    console.log(cooks_values[key]);
    // если новый кук - добавляем
    if (ls_dates[key]==undefined){
        console.log("--add to localstorage");
        datec = new Date(Date.now() + 86400e3*dayssavecookies);        
        ls_dates[key]=datec;
    };
   // если кук истек в локальном хранилище - трём его в куках и в локальном хранилище 
   if (new Date(ls_dates[key])<Date.now()){
      delete(ls_dates[key]); 
      deleteLCookie(key);
   };    
}    
localStorage.setItem("cooks_dates", JSON.stringify(ls_dates));



Копирование объектов в Javascript

В Javascript лично мне немножко не привычное поведение при присвоении одного объекта другому. Например:

otvet_4={        
        start_button : 1,
        concurent : 22
}

qwest=otvet_4;
qwest.start_button=10;

console.log(qwest.start_button);
console.log(otvet_4.start_button);

Выведет на экран две цифры 10. Т.е. меняется и первоначальный обьект?? Фактически значит знаком =, создается не копия, а ссылка на объект.

Одним из методов позволяющих «истинно копировать», является применение например такого трюка:

otvet_4={
 start_button : 1,
 concurent : 22
}

qwest=JSON.parse(JSON.stringify(otvet_4));
qwest.start_button=10;

console.log(qwest.start_button);
console.log(otvet_4.start_button);

В этом случае в консоль выведет 1 и 10, что и ожидали.. Так-же можно воспользоваться функцией Object.assign… Но тут есть тоже подводные камни. Хороший материал по копированию объектов в Javascript тут