我正在开发一个网站,用户可以在此网站上更改必须确认的设置才能生效。
确认是通过我通过电子邮件发送的链接完成的。在网站的HTML中我使用这个小片段:
<script type="text/javascript">window.name="mysite";</script>
在我使用的HTML电子邮件中
<a href="..." target="mysite">Click me</a>
但Chrome始终会打开新标签,而不是将它们全部打开。
这是否可能或由于某些原因而被禁止?
答案 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)
其他两个答案都不起作用,但这个答案可能会:
onstorage
事件,并创建某个密钥,例如&#34; userHasConfirmedEmail&#34 ;.事件发生时,window.top.close()
。信用转到Tomas and his answer。