Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.05.2020, 13:35
Новичок на форуме
Отправить личное сообщение для novice123 Посмотреть профиль Найти все сообщения от novice123
 
Регистрация: 11.05.2020
Сообщений: 4

Редирект по cookies при загрузке страницы
Есть главная страница и подразделы (например, /1 и /2). В этих страницах есть одинаковое меню.

Пользователь кликнул на ссылку 1 - записывается соответствующее cookie. Так же и с ссылкой 2.

Пытаюсь при загрузке главной страницы проверять cookie и перенаправлять пользователя на соответствующую страницу.

Очень плохо разбираюсь в JS, поэтому нагородил из найденных в сети кусочков кое-что и не могу понять, как мне передать список адресов через <body onload="UrlByCookie('reg2go', 'http://test.test/1/')">

Помогите заставить это работать или укажите на подходящий пример. Ругайте, бейте тапками, но помогайте. Заранее благодарю.

Вот мой пример главной страницы:

<html>
<head>

<script>
	function setCookie(cname, cvalue, exdays, path) {
			var d = new Date();
			d.setTime(d.getTime() + (exdays*24*60*60*1000));
			var expires = "expires="+d.toUTCString();
			document.cookie = cname + "=" + cvalue + "; " + expires + "; " + "path=/";
		}

	function GetCookie(name) {
		var value = "; " + document.cookie;
		var parts = value.split("; " + name + "=");
		if (parts.length == 4) return parts.pop().split(";").shift();
	}

	function UrlByCookie(cookie_name, url_to_go) {
	  GetCookie("reg2go") == cookie_name && (window.location.href = url_to_go);
	}

}
</script>
</head>

<body onload="UrlByCookie('reg2go', 'http://test.test/1/')">

<a href="http://test.test/1/" onclick="setCookie('reg2go', 'http://test.test/1/', '100', '/')">1</a>
<hr/>
<a href="http://test.test/2/" onclick="setCookie('reg2go', 'http://test.test/2/', '100', '/')">2</a>
<hr/>
<a href="http://test.test/3/" onclick="setCookie('reg2go', 'http://test.test/3/', '100', '/')">3</a>
<hr/>
</body>
</html>
Ответить с цитированием
  #2 (permalink)  
Старый 11.05.2020, 16:08
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Вам следует записать в хранилище при нажатии на ссылку адрес, куда она ведёт. Затем при повторном посещении главной страницы проверить, есть ли адрес в хранилище, и если есть, то перейти...

<html>
<head>
<script>

if("reg2go" in localStorage) {
	location.href = localStorage.reg2go;
}

addEventListener("click", event => {
	const link = event.target.closest("a");
	if(link != null) {
		localStorage.reg2go = link;
	}
});
</script>
</head>

<body>
	<a href="http://test.test/1/">1</a>
	<hr/>
	<a href="http://test.test/2/">2</a>
	<hr/>
	<a href="http://test.test/3/">3</a>
	<hr/>
</body>
</html>


Сообщение от novice123
Пытаюсь при загрузке главной страницы проверять cookie
Зачем? Разве не достаточно хранить значение в локальном хранилище?

Сообщение от novice123
Ругайте
Зачем?

Сообщение от novice123
бейте тапками
Зачем? BDSM Hardcore?

Последний раз редактировалось Malleys, 11.05.2020 в 16:26.
Ответить с цитированием
  #3 (permalink)  
Старый 11.05.2020, 17:32
Новичок на форуме
Отправить личное сообщение для novice123 Посмотреть профиль Найти все сообщения от novice123
 
Регистрация: 11.05.2020
Сообщений: 4

Сообщение от Malleys Посмотреть сообщение
Вам следует записать в хранилище при нажатии на ссылку адрес, куда она ведёт. Затем при повторном посещении главной страницы проверить, есть ли адрес в хранилище, и если есть, то перейти...
Спасибо за ответ, это очень интересно.

Ваш пример записывает в локальное хранилище адрес любой кликнутой на странице ссылки, если я правильно понимаю. Если мне понадобится записывать адреса не всех кликнутых ссылок, а только конкретных - мне просто нужно onclick вызывать функцию, которая будет записывать в локальное хранилище, верно?

И еще - как поступить с внутренними страницами, с которых не требуется делать редирект, но нужно записывать адреса некоторых ссылок? Нужно просто oncklick перезапиывать наш ключ reg2go, чтобы при последующем заходе на главную, там выполнить редирект, верно?
Ответить с цитированием
  #4 (permalink)  
Старый 11.05.2020, 23:54
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от novice123
Если мне понадобится записывать адреса не всех кликнутых ссылок, а только конкретных - мне просто нужно onclick вызывать функцию, которая будет записывать в локальное хранилище, верно?
Можно так, а можно добавить класс к ссылке.

Сообщение от novice123
как поступить с внутренними страницами, с которых не требуется делать редирект
Проверять, главная ли это страница.

Вот пример, если у ссылки есть класс reg2go, то при нажатии на неё в хранилище записывается её адрес. Также указано, что переход на другую страницу производится только с главной страницы.
<html>
<head>
<script>

if(location.pathname == "/" && "reg2go" in localStorage) {
	location.href = localStorage.reg2go;
}

addEventListener("click", event => {
	const link = event.target.closest("a.reg2go");
	if(link != null) {
		event.preventDefault();
		localStorage.reg2go = link;
	}
});
</script>
</head>

<body>
	<a class="reg2go" href="http://test.test/1/">1</a>
	<hr/>
	<a class="reg2go" href="http://test.test/2/">2</a>
	<hr/>
	<a href="http://test.test/3/">3</a>
	<hr/>
</body>
</html>
Ответить с цитированием
  #5 (permalink)  
Старый 12.05.2020, 11:06
Новичок на форуме
Отправить личное сообщение для novice123 Посмотреть профиль Найти все сообщения от novice123
 
Регистрация: 11.05.2020
Сообщений: 4

Сообщение от Malleys Посмотреть сообщение
Также указано, что переход на другую страницу производится только с главной страницы.
Переход (автоматический) с главной страницы я понял, вижу. Учет класса ссылки тоже. Но непонятно, почему не происходит перехода с внутренних страниц по клику на ссылке класса reg2go.

А если пользователь перешел с внутренней страницы на главную и мы по клику записали в хранилище адрес главной, при новом заходе на главную произойдет переход на текущий адрес? Как этого избежать?
Ответить с цитированием
  #6 (permalink)  
Старый 14.05.2020, 15:00
Новичок на форуме
Отправить личное сообщение для novice123 Посмотреть профиль Найти все сообщения от novice123
 
Регистрация: 11.05.2020
Сообщений: 4

Добавил кое-что:
var nogo = localStorage.getItem('reg2go');

if (nogo != null && nogo != "http://test.test/" && location.pathname == "/" && "reg2go" in localStorage) {
	location.href = localStorage.reg2go;
}

addEventListener("click", event => {
	const link = event.target.closest("a.reg2go");
	if(link != null) {
		event.preventDefault();
		localStorage.reg2go = link;
		location.href = localStorage.reg2go;
	}
});


Наверное, не очень элегантно? Однако работает. Спасибо, Malleys!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автонажатие кнопки "обзор" при загрузке страницы для Input type=file KorbenAV Общие вопросы Javascript 4 21.03.2021 16:17
запуск анонимной функции при загрузке страницы golden_yuna Общие вопросы Javascript 10 16.04.2016 20:42
Сделать вкладку активной при загрузке страницы kkolorid Элементы интерфейса 14 02.12.2014 15:36
Функция javascript вызывается при загрузке страницы Juli174 Общие вопросы Javascript 1 17.12.2013 19:38
Как открыть модальное окно сразу при загрузке страницы dgabets jQuery 3 13.02.2012 21:03