Используйте window.name, чтобы открывать ссылки в сообщениях электронной почты на одной вкладке.
Я разрабатываю веб-сайт, где пользователи могут изменять настройки, которые они должны подтвердить, прежде чем вступят в силу.
Подтверждение выполняется по ссылке, которую я отправляю по электронной почте. В HTML-сайте сайта я использую этот небольшой фрагмент:
<script type="text/javascript">window.name="mysite";</script>
И в письмах HTML я использую
<a href="..." target="mysite">Click me</a>
Но Chrome всегда открывает новые вкладки, а не открывает их все в одном.
Возможно ли это, или это запрещено по некоторым причинам?
Ответы
Ответ 1
Это очень интересная идея. Мне это нравится. Увы, похоже, что в современных браузерах вы больше не можете закрывать окно, которое вы не открывали через javascript. Поэтому, если вам не разрешено запускать javascript в письме, лучше всего переадресовать исходную страницу на страницу "спасибо" и оставить ее висящей на вкладке браузера (но больше не ожидая согласования). Вот так:
PleaseConfirm.html:
window.name="need_redirected";
Confirm.html:
var w = window.open("", "need_redirected");
if (w)
w.location="ThankYou.html";
Конечно, для старого IE я все равно попытаюсь закрыть старое окно в файле ThankYou.html:
window.top.close();
Вы все же можете попытаться установить цель, конечно, на всякий случай, если она работает, и вы всегда можете попробовать поместить атрибут onclick в свой тег по той же причине:
<a href="confirm.html" target="need_redirected" onclick="window.open('confirm.html', 'need_redirected');">click here </a>
Но это, кажется, лучшее, что вы можете сделать. Облом.
Ответ 2
Платформы Webmail, такие как Gmail, как правило, изменяют некоторые из HTML-кода электронной почты из-за соображений безопасности.
Они, очевидно, удаляют любой код javascript, который может иметь электронное письмо. Но они также изменяют (или добавляют, если нет) целевое свойство каждого элемента привязки и устанавливают их в target="_blank"
, чтобы избежать удаления пользователя из Gmail (в этом случае).
К сожалению, у каждой платформы веб-почты есть свое поведение, поэтому то, что вы хотите сделать, не будет работать на каждой платформе электронной почты.
Если вы хотите, чтобы пользователь не открывал несколько вкладок одной и той же страницы (* см. "Обновление 1" ), вам приходит в голову, что вы можете использовать веб-сокеты, чтобы закрыть предыдущую вкладку после входа пользователя URL-адрес, отправленный по электронной почте. Посмотрите socket.io, например.
Обновление 1
Невозможно сделать это с помощью WebSockets. Невозможно закрыть окно, которое не было открыто с помощью javascript, и оно может быть закрыто только родителями.
Ответ 3
Ни один из двух других ответов не работает, но это, вероятно, будет:
- На начальной вкладке прослушайте событие
onstorage
, с определенным создаваемым ключом, например. "UserHasConfirmedEmail". Когда событие происходит, window.top.close()
.
- На новой вкладке создайте этот ключ.
Кредит отправляется Томасу и его ответ.