Подтвердить что ты не робот

Используйте window.name, чтобы открывать ссылки в сообщениях электронной почты на одной вкладке.

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

Подтверждение выполняется по ссылке, которую я отправляю по электронной почте. В HTML-сайте сайта я использую этот небольшой фрагмент:

<script type="text/javascript">window.name="mysite";</script>

И в письмах HTML я использую

<a href="..." target="mysite">Click me</a>

Но Chrome всегда открывает новые вкладки, а не открывает их все в одном.

Возможно ли это, или это запрещено по некоторым причинам?

4b9b3361

Ответ 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().
  • На новой вкладке создайте этот ключ.

Кредит отправляется Томасу и его ответ.