使用window.name在同一选项卡中打开电子邮件中的链接

时间:2015-06-11 17:00:52

标签: html hyperlink target

我正在开发一个网站,用户可以在此网站上更改必须确认的设置才能生效。

确认是通过我通过电子邮件发送的链接完成的。在网站的HTML中我使用这个小片段:

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

在我使用的HTML电子邮件中

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

但Chrome始终会打开新标签,而不是将它们全部打开。

这是否可能或由于某些原因而被禁止?

3 个答案:

答案 0 :(得分:8)

由于安全原因,Gmail等网络邮件平台倾向于修改电子邮件的某些HTML代码。

他们显然删除了电子邮件可能包含的任何JavaScript代码。但是它们也会更改(或者如果没有添加)每个锚元素的目标属性,并将它们设置为target="_blank",以避免用户被取出Gmail(在这种情况下)。

不幸的是,每个webmail平台都有自己的行为,因此,你想做的事情不会在每个webmail平台上运行。

如果您要做的是阻止用户打开同一页面的多个标签页(*请参阅更新1),请记住,一旦用户输入,您可以使用网络套接字关闭上一个标签页电子邮件发送的URL。例如,请查看socket.io

更新1

使用WebSockets无法做到这一点。没有办法关闭一个没有使用javascript打开的窗口,它只能由它的父母关闭。

答案 1 :(得分:8)

这是一个非常有趣的想法。我喜欢。唉,在现代浏览器中,您似乎无法再关闭未通过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 :(得分:3)

其他两个答案都不起作用,但这个答案可能会:

  1. 在初始标签中,收听onstorage事件,并创建某个密钥,例如&#34; userHasConfirmedEmail&#34 ;.事件发生时,window.top.close()
  2. 在新标签中,创建该密钥。
  3. 信用转到Tomas and his answer