与target =“_ blank”的链接无法在Chrome中的新标签页中打开

时间:2015-04-04 07:55:27

标签: html hyperlink

this website上,顶级手风琴导航包含一个名为“基础”的元素:(screenshot)

此元素由HTML代码生成:

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

但是,在Chrome中,当您点击此元素时,新网站无法在新标签页中打开。

你能告诉我为什么吗?谢谢。

8 个答案:

答案 0 :(得分:13)

因为JavaScript正在处理click事件。单击时,将调用以下代码:

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);

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

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;
            }
        }
    });
});

这将检查元素的target属性以查看它是否_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被禁用/不受支持时的链接。

祝你好运!

答案 1 :(得分:10)

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和其他浏览器中使用。

由于 阿努拉格

答案 2 :(得分:4)

由于某种原因,它不起作用,所以我们可以通过另一种方式来做到这一点

只需删除该行并添加: -

<a onclick="window.open ('http://www.foracure.org.au', ''); return false" href="javascript:void(0);"></a>
祝你好运。

答案 3 :(得分:4)

向另一个人学习:

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

这对我来说很有意义。

答案 4 :(得分:1)

您对target属性的语法是正确的,但浏览器不需要遵守它。他们可能会将其解释为在新选项卡而不是新窗口中打开目标,或者他们可能完全忽略该属性。浏览器具有此类问题的设置。此外,浏览器插件可以防止打开新窗口(通常设计用于防止恼人的广告)。

作为作者,你几乎无能为力。您可以考虑使用JavaScript打开一个新窗口,参见到目标的接受答案=&#34; _blank&#34;是不是在firefox中工作?但是浏览器可能更不愿意让页面打开新窗口而不是通过目标。

target="_blank" is not working in firefox?

答案 5 :(得分:1)

根据这篇文章 How to fix target=”_blank” links: a security and performance issue in web pages 这是由于安全问题。 尝试将 rel=”noopener noreferrer” 添加到您的标签中,或尝试使用此 JavaScript:

let link = window.open(url, "_blank");
link.opener = null;

答案 6 :(得分:-2)

如果您使用React,这应该有效:

&#13;
&#13;
<a href="#" onClick={()=>window.open("https://...")}</a>
&#13;
&#13;
&#13;

答案 7 :(得分:-2)

最简单的答案 只需将target =“ _ blank”放在href

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

它将起作用