在Chrome浏览器中,使用target="_blank"链接无法在新标签页中打开

49
这个网站上,顶部手风琴导航包含一个名为“Foundation”的元素:(截图)
该元素由以下HTML代码生成:
<a href="http://www.foracure.org.au" target="_blank" style="width: 105px;"></a>

然而,在Chrome中,当您点击此元素时,新网站不会在新标签页中打开。

请问您能告诉我为什么吗?谢谢。


1
按照我的预期正常工作,目标在新标签页中打开。 - arkascha
感谢@arkascha。我编辑了问题以指出问题发生在Chrome中。 - Steve
我正在使用Chromium浏览器。对我来说很有效。因此,显然这是谷歌为其Chrome版本添加到精细的Chromium浏览器的任何效果。 - arkascha
12个回答

37
Replace 

<a href="http://www.foracure.org.au" target="_blank"></a>    

with 

<a href="#" onclick='window.open("http://www.foracure.org.au");return false;'></a>

在你的代码中,并且可以在Chrome和其他浏览器中使用。

谢谢
Anurag


3
这会起作用。但是如Jack所提到的,如果不支持Javascript,这将会失败。MDN建议永远不要使用此方法,并提供了几个原因。希望这能帮到您:https://developer.mozilla.org/zh-CN/docs/Web/API/Window/open#%E4%B8%8D%E8%A6%81%E4%BD%BF%E7%94%A8%E8%BF%99%E4%B8%AAjavascriptwindow.open(...)_...%E7%9A%84%E5%BD%A2%E5%BC%8F%E5%AE%9E%E7%8E%B0%E5%BC%80%E5%90%AF%E9%93%BE%E6%8E%A5 - sdw
2
这不是一个好的替代方案,因为这可能会阻碍这些链接的爬取。 - Sahil Sharma
很遗憾,在应用程序浏览器中无法工作 Instagram =( - jonathasborges1
JS不支持电子邮件,因此如果此代码在电子邮件中,则不好。 - Ohad the Lad
非常感谢@Anurag。你真的救了我的命! :) - Simon

25

由于 JavaScript 处理点击事件。当您单击时,将调用以下代码:

el.addEvent('click', function(e){
    if(obj.options.onOpen){
        new Event(e).stop();
        if(obj.options.open == i){
            obj.options.open = null;
            obj.options.onClose(this.href, i);
        }else{
            obj.options.open = i;
            obj.options.onOpen(this.href, i);
        }   
    }       
})

onOpen 用于手动更改 location

编辑:关于您的评论......如果您可以修改 ImageMenu.js,可以更新调用 onClose 的脚本,以传递 a 元素对象(this,而不是 this.href)。

obj.options.onClose(this, i);

然后更新您的 ImageMenu 实例,使用以下 onOpen 更改:

window.addEvent('domready', function(){
    var myMenu = new ImageMenu($$('#imageMenu a'), {
        openWidth: 310,
        border: 2,
        onOpen: function(e, i) {
            if (e.target === '_blank') {
                window.open(e.href);    
            } else {
                location = e.href;
            }
        }
    });
});

如果它的目标属性是_blank,那么这将检查元素的目标属性,然后调用window.open

如果您不想修改ImageMenu.js,则另一个选项是在您的onOpen处理程序中标识链接。例如:

<a href="http://www.foracure.org.au/#_b=1" target="_blank" style="width: 105px;"></a>

然后,更新您的onOpen调用:

onOpen: function(e, i) {
    if (e.indexOf('_b=1') > -1) {
        window.open(e);   
    } else {
        location = e;
    }
}

唯一的缺点是用户在悬停时可以看到哈希值。

最后,如果您计划在新窗口中打开的链接数量较少,您可以创建一个映射并对其进行检查。类似这样:

var linksThatOpenInANewWindow = {
    'http://www.foracure.org.au': 1
};

onOpen: function(e, i) {
    if (linksThatOpenInANewWindow[e] === 1) {
        window.open(e);   
    } else {
        location = e
    }
}

唯一的缺点是维护,这要取决于链接的数量。

其他人建议修改链接(使用#javascript:)并添加内联事件处理程序(onclick)-我根本不建议这样做,因为当JS被禁用/不支持时会破坏链接。


谢谢Jack。能否编辑这个JavaScript以在新标签页中打开链接?如果可以,怎么做? - Steve
1
嘿,@Steve - 我编辑了我的答案并包含了一些解决方法。希望它们有所帮助! :) - Jack

8

向别人学习:

<a onclick="window.open(this.href,'_blank');return false;" href="http://www.foracure.org.au">Some Other Site</a>

我理解这个意思。


谢谢,你的解决方案对我很有效。也别忘了感谢另外那位朋友 ;) - mustapha mekhatria

6
由于某些原因,它无法正常工作,我们可以通过另一种方式来解决这个问题。只需删除该行并添加以下内容:
<a onclick="window.open ('http://www.foracure.org.au', ''); return false" href="javascript:void(0);"></a>

祝你好运。


3

我在我的情况下尝试了这个方法,但它并没有改变链接从重定向而不是在新标签页中打开的问题。有没有办法检查这个问题是否导致了这个问题? - Sarfaraaz

2

我也遇到了同样的问题。

通过在href之前添加target="_blank",问题得以解决。

<a target="_blank" href="http://www.google.com">Example</a>


1

更好的选择是

<a href="http://www.foracure.org.au" target="frameName" style="width: 105px;"></a>


您的答案可以通过添加更多支持信息来改进。请点击[编辑]以添加更多细节,如引用或文档,以便他人确认您的答案是否正确。您可以在帮助中心中找到有关撰写好回答的更多信息。 - jasie
这是唯一一个对我有效的解决方案(不使用JavaScript)。 - Tim John

1
您的 target 属性语法是正确的,但浏览器不一定会遵守它。它们可能将其解释为在一个新标签页中打开目标而非新窗口,或者完全忽略该属性。浏览器对此类问题有设置。此外,打开新窗口可能会被浏览器插件阻止(通常是为了防止烦人的广告)。
作为作者,您很难对此进行控制。您可以考虑使用 JavaScript 打开一个新窗口,参见 target="_blank" is not working in firefox? 的已接受答案,但浏览器可能会更加不愿意让页面通过这种方式打开新窗口。 target="_blank" is not working in firefox?

1
引用的链接与 target="_blank" 在 Firefox 中无法工作无关,而是因为 OP 尝试使用 Firefox 不支持的调用来关闭窗口。该链接与此 OP 的问题无关。 - trash80

0
你链接的网站使用了WordPress和JavaScript库sliding door imageMenu,其中ImageMenu.js这段代码为锚点添加了一个点击事件。
el.addEvent('click', function(e){

    if(obj.options.onOpen){
        new Event(e).stop();
        if(obj.options.open == i){
            obj.options.open = null;
            obj.options.onClose(this.href, i);
        }else{
            obj.options.open = i;
            obj.options.onOpen(this.href, i);
        }           
    }           
})

它停止事件的部分可能会覆盖点击锚点标签的默认行为,该行为将由浏览器处理。 我认为这样做的默认原因是“滑动门”应该在单击时关闭而不是链接到外部网站。 通常,导航菜单包含带有超链接的锚点标签,如果href未设置为#,则会重新加载页面,而不是打开或关闭“滑动门”,类似于汉堡菜单。


0
如果你像这样编写一个链接:

<a href="https://www.example.com/" target="_WORD" rel="noreferrer">

它将在一个新的浏览器标签中打开。

你可以使用几乎任何以下划线字符开头的单词。只是不要使用"_blank"

问题100%解决!


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