尽可能在新标签页中打开网址或重用现有标签页

35

现在我有一个链接

<a href="blabla" target="_blank">link</a>

然而,这总是打开一个新标签页。我想要以下效果:

  1. 如果用户已经有一个包含相同URL的标签页,则重用该标签页,如有可能则刷新
  2. 否则,打开一个新的标签页

我该如何使用JavaScript实现此功能?

如果只有一些特定于浏览器的方法,那么也可以,因为没有对应支持的浏览器用户将“回退”到始终新建标签页的方式。


我还没有足够的声望来发表评论,请不要选择这个作为答案,但我相信你会在这里找到一个几乎重复的问题:https://dev59.com/HE3Sa4cB1Zd3GeqPtDBZ 祝好运! - Chris Like
2个回答

35

你可以设置特定窗口的名称,以便重复使用标签页。问题是,只要href相同,它就不会重新加载。因此,你不能轻松地获取refresh部分。

例如,你可以有:

<a href="blabla" target="blabla">link</a>
<a href="foo" target="bar">link</a>

在JS中,你实际上可以使用window.open来获得相同的效果。你也可以使用URL作为target,这样你就不需要手动指定了:

<a href="blabla" onclick="window.open(this.href, this.href); return false">link</a>
<a href="foo" onclick="window.open(this.href, this.href); return false">link</a>

你也可以进行概括,并向文档添加点击监听器,以此方式打开一些链接。就像这样:

<div id="container">
    <a href="blabla">link</a>
    <a href="foo">link</a>
</div>

<script>
    document.getElementById("container").onclick = function(evt){
        if (evt.target.tagName === "A")
            window.open(evt.target.href, evt.target.href);

        return false;
    }
</script>

如果页面在同一个域名下,此时您可以尝试进行经验性的页面刷新。


3
不知何故,这对我没有起作用。如果我理解了问题和答案,第一次链接点击将在浏览器中打开新标签页,并且在单击任何链接后,应重复使用同一浏览器标签页...我尝试了这个解决方案,但从未奏效。它每次都会打开新的标签页。除非触发相同的链接,否则它不会打开另一个标签页。 - Liladhar
请注意,在第二次按下Ctrl +单击后,浏览器(至少是Chrome)将切换到此选项卡。这不是我所期望的。 - coolguy
2
能否有人谁理解这个答案,将其编辑为更好的英语? - cda01
在我的测试中,这仅适用于相同的域名;所有其他的都会在新的浏览器窗口中打开。 - llessurt

0
设置target="child"会在当前标签页已打开的情况下刷新该标签页。
<a href="https://abcd.com" target="child">ABcd</a>
<a href="https://defg.com" target="child">Defg</a>

我无法像示例中那样跨域使其工作。 - llessurt
应该是以下划线开头的"_child"吗?这样似乎可以正常工作(没有下划线的话,就不行)。 - HynekS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接