当链接在新标签页打开时如何保持当前窗口?

42

当用户点击链接时

<a href="http://www.stackoverflow.com" target="_blank">click</a>
有没有一种方法可以停留在当前窗口,而不是跳转到选项卡?

1
这绝对不可能用PHP实现。 - Nathan
5
交给用户自己决定。如果他们不想立刻去新窗口,可以右键选择“在新标签页中打开”。它会在后台打开标签页,至少对于我来说是这样的。如果我只是单击链接,我期望立即显示该页面。底线是,“不要激怒你的访问者”。 - animuson
3
如果用户想在实际进入链接之前打开10个链接,而不想等待每个链接加载完成,那么他可以同时打开所有链接,然后在其他链接加载时阅读其中一个链接。 - Muhammad Umer
2
中间点击打开一个新标签页,用户可以配置浏览器是否聚焦于新标签页。这不是网站可以或应该决定的事情。 - ThiefMaster
这里是翻译内容:即使在设置中关闭了该选项,也会自动切换到在新标签页中打开的新链接。 - kmario23
显示剩余2条评论
8个回答

6

我猜target="_blank"会在新的标签页或窗口打开链接,但是也会切换到该标签页,而且我找不到任何与此相关的html标签。

但是当我们按住control键点击链接时,它会在新的后台标签页中打开。

使用JavaScript我们可以模拟相同的效果,以下是我找到的代码:

function openNewBackgroundTab(){    
    var a = document.createElement("a");    
    a.href = "http://www.google.com/";    
    var evt = document.createEvent("MouseEvents");    

    //the tenth parameter of initMouseEvent sets ctrl key    
    evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0,true, false, false, false, 0, null);    
    a.dispatchEvent(evt);
}

掌握<ctrl>+<click>行为的知识正是我在这里需要的,谢谢!我会告诉用户并解决问题。毕竟,我们不想对浏览器工作方式进行过多的调整,因为在我看来,这会比我们做的其他大多数事情都更加恶化用户体验。 - Markus-Hermann
需要注意的是,这仅适用于Chrome浏览器,并且只有在与原始点击事件相同的堆栈中执行时才有效。简单的setTimeout会破坏此行为,导致window.open在超时或间隔后始终处于前台。请参见https://codepen.io/jeffreyvn/pen/BapLoqQ进行小型演示。 - Jeffrey van Norden

5
<a href="www.stackoverflow.com" onclick="window.open('#','_blank');window.open(this.href,'_self');">

这将在一个新的标签页中加载当前网页,并使浏览器聚焦于该标签页,然后在当前标签页中加载 href。


5
请注意,此操作可能会打开一个新窗口或触发弹出窗口拦截器。 - ThiefMaster
1
虽然从技术上讲,这个解决方案可以工作,但在某些特定情况下可能会失败:1)如果用户有弹出窗口拦截器,则可能无法正常工作;2)如果URL包含#值,则该值将丢失;3)由于当前页面在新选项卡中重新加载,因此将再次运行在加载时运行的脚本/下载/操作;4)当前页面丢失,如果用户正在执行某个操作(例如填写表单),则信息也将丢失。其中一些可以通过更改/添加更多代码来避免(例如,#2可以通过执行window.open(window.location.href,'_blank')来解决),但这可能会很麻烦。 - Alvaro Montoro

1
尝试这个(我发现它对于在背景中播放音频文件而不分散用户注意力或使用脚本非常有用)。
<a href="first.mp3" target="yourframename"> First Song </a>
<a href="second.mp3" target="yourframename"> Second Song </a>

第一次用户点击链接时,目标窗口会置于顶部。任何后续的点击都将使当前窗口保持在顶部。基本上,由于没有指定 <frame> 或 <iframe>,所以这些链接在后台窗口中打开。
仅适用于 Opera、Mozilla 和 IE(我电脑上的版本)。对于 Chrome 和 Safari 不起作用。

1

不,这由浏览器控制。


有这方面的来源吗? - misolo
@misolo,这是您需要的链接:https://support.mozilla.org/zh-CN/kb/tab-preferences-and-settings。 - kmario23

1
你可以在新标签页打开当前页面,当这个新标签页获得焦点时,它看起来像是你还停留在同一个页面,然后将原来的页面切换到新的网址。
window.open(window.location.href)
window.location.href = new_url 

0

可以使用JavaScript轻松地通过委托函数拦截所有点击事件,然后在事件上调用preventDefault()来实现。之后就是创建一个类似于讨厌的广告一样的弹出窗口的问题了 ;)

话虽如此,除非你打算惹恼你的用户,否则不要这样做 :P


3
你能给一个例子或者 JSFiddle 吗? - Muhammad Umer

-1

它会在新标签页或窗口中打开 target="_blank"

保持在当前标签页或窗口中 target="_self"


-2

目前还没有控制这个的方法。


如果您想删除现有的行为:

是否有一种方法可以停留在当前窗口而不是转到标签页[当链接具有target="_blank"]?

只有在您首先执行以下操作时才能实现...

$('a[target="_blank"]').removeAttr('target');

5
不是玩笑,这个问题至少有两种不同的解释(既然它被接受了,那么 Alex 的解释肯定不会完全错)。解释1: 在新标签页中打开链接,但保持用户所在页面的焦点。解释2: 当单击时在当前标签页中打开链接(即使它设置了 target_blank)- 这在这里得到了正确的回答。 - Levite

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