带有 target="_blank" 的链接无法在 Chrome 的新选项卡中打开

问题描述 投票:0回答:12
html hyperlink
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 和其他浏览器中工作。

谢谢 阿努拉格


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时它会破坏链接。


8
投票
向另一个人学习:

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

这对我来说很有意义。


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

只需删除该行并添加以下内容:-

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

祝你好运。


3
投票
根据这篇文章

如何修复target=”_blank”链接:网页中的安全和性能问题这是由于安全问题造成的。 尝试将 rel=”noopener noreferrer”

 添加到您的标签,或尝试以下 JavaScript:

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

2
投票
我也有同样的问题。

通过将

target="_blank"

 放在 
href
 之前修复它

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


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

作为作者,你对此无能为力。您可能会考虑使用 JavaScript 打开一个新窗口,参见。对 target="_blank" 的接受答案在 Firefox 中不起作用?,但浏览器可能更不愿意让页面以这种方式打开新窗口,而不是通过 target。

target="_blank" 在 Firefox 中不起作用?


1
投票
更好的选择是

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


0
投票
您链接的网站使用 WordPress 和 Javascript 库 推拉门图片菜单 在 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%解决!


-3
投票
最简单的答案

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


-4
投票
如果你使用 React 这应该可以工作:

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

© www.soinside.com 2019 - 2024. All rights reserved.