【问题标题】:Use window.name to open links in emails in the same tab使用 window.name 在同一选项卡中打开电子邮件中的链接
【发布时间】:2015-06-11 17:00:51
【问题描述】:

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

确认是通过我通过电子邮件发送给他们的链接完成的。在网站的 HTML 中,我使用了这个小 sn-p:

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

在我使用的 HTML 电子邮件中

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

但 Chrome 总是打开新标签页,而不是同时打开它们。

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

【问题讨论】:

  • 我尝试使用 browser context name 规范分配给 window.top.name,但当点击针对我现有标签的链接时,Chrome 也会打开一个新标签。
  • 你试过base元素吗?

标签: html hyperlink target


【解决方案1】:

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

请确认.html:

window.name="need_redirected";

确认.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】:

    出于安全原因,Gmail 等 Webmail 平台倾向于修改电子邮件的部分 HTML 代码。

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

    不幸的是,每个网络邮件平台都有自己的行为,因此,您想要做的并不是在每个网络邮件平台上都有效。

    如果您想要阻止用户打开同一页面的多个选项卡,(*请参阅更新 1)请记住,一旦用户进入,您可以使用 Web 套接字关闭前一个选项卡通过电子邮件发送的 URL。以socket.io 为例。

    更新 1

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

    【讨论】:

    【解决方案3】:

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

    1. 在初始选项卡中,侦听onstorage 事件,并创建某个键,例如“userHasConfirmedEmail”。事件发生时,window.top.close()
    2. 在新选项卡中,创建该密钥。

    归功于Tomas and his answer

    【讨论】:

    • 好主意,但不幸的是,较新的浏览器版本将阻止 JavaScript 关闭不是由同一脚本首先打开的选项卡。在这一点上,我们似乎对 OP 提出的问题感到困惑。
    猜你喜欢
    • 2012-08-18
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多