Javascript-форум (https://javascript.ru/forum/)
-   Работа (https://javascript.ru/forum/job/)
-   -   Окно приветствия (https://javascript.ru/forum/job/76727-okno-privetstviya.html)

Malleys 08.02.2019 12:20

<div class="hello" style="display:none" id="welcome-window">
	<div class="hellotext">
		<div align="center" class="logo">
			<img src="/logo.png" alt="" />
			Добро пожаловать!
		</div>
	</div>
</div>
<script>
(function(){
	var win = document.getElementById("welcome-window");
	if(win && "visited" in sessionStorage === false) {
		win.style.display = "block";
		sessionStorage.visited = true;
	}
})();
</script>

рони 08.02.2019 12:47

Malleys,
:) :thanks:

SuperZen 08.02.2019 13:15

Если как у Malleys, если открыть в другом табе, приветствие будут отображено в каждом табе... и чтобы от этого избавиться надо завязываться на сессию php, или делать финт ушами ) через service workers + localStorage на стороне клиента... но можно и так, если не платить денег %)

рони 08.02.2019 13:19

SuperZen,
спасибо за уточнение!

SuperZen 08.02.2019 13:41

рони, не за что, в общем сессия php живет до закрытия браузера, sessionStorage живет до закрытия таба... надо хранить кол-во открытых табов, те при загрузке в localStorage сделать tab + 1, при закрытии таба делать tab -1, и если tab = 0 или пусто, то показываем приветствие... но тут появляется другая проблема, с точки перфекционизма, что будет если закрыть браузер, и потом его открыть, что показывать в открытых табах... только в одном табе показывать приветствие или во всех... задача из серии сделать "Remember Me" на "Login" странице, на стороне клиента... :)

SuperZen 08.02.2019 16:02

Цитата:

Сообщение от Malleys (Сообщение 503353)
Было бы странно, если бы оно не отобразилось. А то какой-смысл открывать новую вкладку, если в ней всё восстановится, что уже есть в открытой вкладке.

Здесь не про то, что там что-то надо восстановить, а то что sessionStorage работает только для одного таба... И чтобы показывать приветствие только для первого открытого таба, и чтобы не показывать приветствие в других табах, если его показали для первого таба... да, таких условий не было озвучено, и возможно потому что это не явно ясно, видим сессию и все понеслась душа в рай... :D

Malleys 08.02.2019 16:48

Цитата:

Сообщение от SuperZen
если открыть в другом табе, приветствие будут отображено в каждом табе...

Было бы странно, если бы оно не отобразилось. А то какой-смысл открывать новую вкладку, если в ней всё восстановится, что уже есть в открытой вкладке.

Для сайта без регистрации/привязки к человеку это идеальное решение, а так оно должно показываться в зависимости от активности пользователя, т. е. посмотрел на компьютере, ему показали приветствие, потом решил смотреть на телефоне, ему приветствие уже не показывается, т. к. пару минут назад его приветствовали на компьютере.

UPD

Цитата:

Сообщение от SuperZen
видим сессию и все

Цитата:

Сообщение от SuperZen
sessionStorage работает только для одного таба

Ведь вы можете учитывать, откуда появилась вкладка... Если пользователи нашли на странице ссылку и в контекстном меню выбрали открыть в новой вкладке или нажали на вкладке дублировать, то тогда приветствие не нужно, а если отдельно ввели адрес в новой вкладке, то тогда нужно! Если вы позволяете такое мнение, то можно посмотреть на document.referrer

<div class="hello" style="display:none" id="welcome-window">
	<div class="hellotext">
		<div align="center" class="logo">
			<img src="/logo.png" alt="" />
			Добро пожаловать!
		</div>
	</div>
</div>
<script>
(function(){
	var win = document.getElementById("welcome-window");
	if(
		win && "visited" in sessionStorage === false &&
		new URL(document.referrer, "file:///").host !== location.host
	) {
		win.style.display = "block";
		sessionStorage.visited = true;
	}
})();
</script>

<a href="?test">Link</a>

ksa 09.02.2019 11:19

Ну теперь бабосов точно не увидим... :D


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