Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Редирект по cookies при загрузке страницы (https://javascript.ru/forum/misc/80229-redirekt-po-cookies-pri-zagruzke-stranicy.html)

novice123 11.05.2020 13:35

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

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

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

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

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

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

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

Malleys 11.05.2020 16:08

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

<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?

novice123 11.05.2020 17:32

Цитата:

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

Спасибо за ответ, это очень интересно. :thanks:

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

И еще - как поступить с внутренними страницами, с которых не требуется делать редирект, но нужно записывать адреса некоторых ссылок? Нужно просто oncklick перезапиывать наш ключ reg2go, чтобы при последующем заходе на главную, там выполнить редирект, верно?

Malleys 11.05.2020 23:54

Цитата:

Сообщение от 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>

novice123 12.05.2020 11:06

Цитата:

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

Переход (автоматический) с главной страницы я понял, вижу. Учет класса ссылки тоже. Но непонятно, почему не происходит перехода с внутренних страниц по клику на ссылке класса reg2go.

А если пользователь перешел с внутренней страницы на главную и мы по клику записали в хранилище адрес главной, при новом заходе на главную произойдет переход на текущий адрес? Как этого избежать?

novice123 14.05.2020 15:00

Добавил кое-что:
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!


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