БлогNot. Javascript: подстановка нового адреса сайта с отсчётом времени до перехода

Javascript: подстановка нового адреса сайта с отсчётом времени до перехода

Тема избитая, поэтому я лишь приведу использованное сегодня решение и кратко сошлюсь на альтернативы.

Наш подход уместен, когда мы можем легко внедрить нужную разметку и код в шаблон страниц сайта.

В простейшем случае достаточно такого Javascript-кода:

<script>
setTimeout(function(){
  window.location.href = "http://new-site.com";
  // Задержка может предотвратить проблемы, связанные с немедленной переадресацией
}, 3000); // 3 секунды
</script>

или же

window.location.replace("http://new-site.com");

если мы не хотим, чтобы старый линк оставался в истории браузера.

Аналогично через jQuery:

$(location).prop('href', 'http://new-site.com');

Если нужно сохранить часть URL после домена, то

<script>
setTimeout(function(){
 window.location = "http://new-site.com" + window.location.pathname;
}, 3000); // 3 секунды
</script>

В реальности обычно неплохо сообщать пользователю новый адрес, перекидывать на него возможные get-параметры URL и вести отсчёт времени, вот нужный нам скрипт с предшествующей разметкой HTML:

<p>Наш новый адрес: <span id="newAddr"></span> (<span id="redirTime"></span>)</p>
<script>
 (function(url,urlId,time,timeId) {
  document.getElementById(urlId).innerHTML = '<a href="'+url+'" target="_blank">'+url+'</a>';
  let timeElem = document.getElementById(timeId);
  timeElem.innerHTML = time;
  let timeLeft = time;
  let downloadTimer = setInterval(function() {
   if (timeLeft <= 0){
    clearInterval(downloadTimer);
    timeElem.innerHTML = 0;
    window.location = url + window.location.pathname + window.location.search;
   } 
   else {
    timeElem.innerHTML = timeLeft;
   }
   timeLeft--;
  }, 1000);
 }('http://new-site.com','newAddr',3,'redirTime'));
  //Новый URL без "/" в конце, id элемента для вывода URL, 
  //время задержки в сек., id элемента для вывода времени
</script>

Есть и другие способы.

1. Редирект через HTML, добавить в секцию <head> тег вида

<meta http-equiv="refresh" content="0;url=http://new-site.com">

Вместо 0 можно указать желаемое количество секунд, а также предусмотреть возможную блокировку тега <meta> браузерами:

<noscript>
  <meta http-equiv="refresh" content="0; URL=http://new-site.com"/>
  <a href="http://new-site.com">Перейдите по ссылке</a>
</noscript>

Хорошо, если на целевых страницах указано, что они канонические (также в секции <head>):

<link rel="canonical" href="http://new-site.com" />

2. Редирект через файл .htaccess - добавить туда директивы

RewriteEngine On
RewriteCond %{HTTP_HOST} old-site.com
RewriteRule (.*) http://new-site.com/$1 [R=301,L]

Возможны варианты, например, с get-параметрами:

RewriteCond %{REQUEST_URI} /index.php
RewriteRule ^(.*)$ http://new-site.com/ [R=301,L]

А вот этот скрипт позволяет посмотреть в диалоговом окне все доступные части ссылки (лучше разместить файл .html на сервере, например, локальном хосте, а не выполнять кликом по протоколу file://):

<script>
function showLoc() {
 const logLines = [
  "Property (Typeof): Value",
  `location (${typeof location}): ${location}`,
 ];
 for (const prop in location) {
  logLines.push(
   `${prop} (${typeof location[prop]}): ${location[prop] || "n/a"}`,
  );
 }
 alert(logLines.join("\n"));
}
</script>
<button onclick="showLoc();">Show location properties</button>

23.11.2024, 21:24 [108 просмотров]


теги: время javascript html ссылки сервер

К этой статье пока нет комментариев, Ваш будет первым