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

Use window.name to open links in emails in the same tab

我正在开发一个网站,用户可以在其中更改必须在生效前确认的设置。

确认是通过 link 我通过电子邮件发送给他们的。在网站的 HTML 中,我使用了这个小片段:

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

在我使用的 HTML 电子邮件中

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

但是 Chrome 总是打开新标签页,而不是将它们全部打开。

这是可能的还是出于某些原因被禁止?

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

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

不幸的是,每个 webmail 平台都有自己的行为,因此,您想要做的并不适用于每个 webmail 平台。

如果你想做的是阻止用户打开同一页面的多个选项卡,(*请参考更新 1)我想到你可以使用网络套接字在用户打开后关闭前一个选项卡输入通过电子邮件发送的 URL。看看 socket.io 例如。

更新 1

使用 WebSockets 无法做到这一点。无法关闭未使用 javascript 打开的 window,它只能由其父级关闭。

这是一个非常有趣的想法。我喜欢。 las,在现代浏览器中,您似乎无法再关闭未通过 javascript 打开的 window。因此,如果不允许您在电子邮件中 ​​运行 javascript,您最好的办法是将原始页面重定向到 "thank you" 页面并将其保留在浏览器的选项卡中(但不再等待确认)。像这样:

PleaseConfirm.html:

window.name="need_redirected";

Confirm.html:

var w = window.open("", "need_redirected");
if (w) 
    w.location="ThankYou.html";

当然,对于旧的IE,我还是会尝试在ThankYou.html中关闭旧的window:

window.top.close();

当然,您仍然可以尝试设置目标,以防万一,出于同样的原因,您始终可以尝试在您的标签上添加一个 onclick 属性:

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

但这似乎是您能做的最好的。无赖。

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

  1. 在初始选项卡中,侦听一个 onstorage 事件,其中创建了某个键,例如"userHasConfirmedEmail"。事件发生时,window.top.close().
  2. 在新选项卡中,创建该键。

归功于