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

Sim*_*n H 19 html hyperlink target

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

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

<script type="text/javascript">window.name="mysite";</script>
Run Code Online (Sandbox Code Playgroud)

在我使用的HTML电子邮件中

<a href="..." target="mysite">Click me</a>
Run Code Online (Sandbox Code Playgroud)

但Chrome总是打开新标签,而不是一次性打开它们.

这是偶数还是由于某些原因被禁止?

tin*_*tin 8

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

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

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

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

更新1

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

  • 我对你认为一个网络套接字如何解决javascript无法关闭他们实际上没有打开的窗口的规则感兴趣? (3认同)

Guy*_*nat 8

这是一个非常有趣的想法.我喜欢.唉,在现代浏览器中,您似乎无法再关闭未通过javascript打开的窗口.因此,如果您不允许在电子邮件中运行javascript,那么您可以做的最好的事情是将原始页面重定向到"谢谢"页面并将其留在浏览器的选项卡中(但不再等待构造).像这样:

PleaseConfirm.html:

window.name="need_redirected";
Run Code Online (Sandbox Code Playgroud)

Confirm.html:

var w = window.open("", "need_redirected");
if (w) 
    w.location="ThankYou.html";
Run Code Online (Sandbox Code Playgroud)

当然,对于旧IE,我仍然会尝试在ThankYou.html中关闭旧窗口:

window.top.close();
Run Code Online (Sandbox Code Playgroud)

当然,您仍然可以尝试设置目标,以防它起作用,并且您可以尝试在标记上添加onclick属性,原因相同:

<a href="confirm.html" target="need_redirected" onclick="window.open('confirm.html', 'need_redirected');">click here </a>
Run Code Online (Sandbox Code Playgroud)

但这似乎是你能做的最好的事情.游民.