Архив рубрики: WEB

Копирование в буфер обмена на 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>

Редирект с http на https на домене с сайтом WordPress

Задача: настроить редирект c http на https на сайте с движком WordPress.

Почему то обычно используемый мной трюк с директивой:

Redirect 301 / https://домен

На WordPress  сработал с ошибкой искажения переадрессации, если в части URL используется /

Потому пошел другим путем, добавил в .htaaccess перед директивами WordPress следующее:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>

# BEGIN WordPress
<IfModule mod_rewrite.c>
...

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

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

Решение:

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

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

Код:

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));



Рабочий способ убрать кнопку закрытия диалога в jqueryui dialog

Гуглится способ как ни странно плохо. С трудом нашел рабочее решение:

<div id="wait_dialog" title="Идет загрузка..">

</div> 
<script>  
$("#wait_dialog" ).dialog({
    autoOpen: false,        
    resizable: true,
    height:'auto',
    width: 'auto',
    modal: true,
    closeOnEscape: false,
    open: function(event,ui) {
      $(".ui-dialog-titlebar-close", ui.dialog || ui).hide();
      $(this).parent().children().children('.ui-dialog-titlebar-close').hide();
    }
});
</script>