javascript:void(0) and target="_blank" behaviour

javascript:void(0) and target="_blank" behaviour

本文关键字:quot behaviour blank target void and javascript      更新时间:2023-09-26

首先,我没有真正的问题。我问这个只是出于好奇。

在同一链接中使用javascript:void(0)target="_blank"时,我意外地遇到了一个奇怪的行为,就像这样。

<a href="javascript:void(0);" target="_blank" /> Link </a>

我发现Chrome正常处理这个,当你点击链接时不做任何事情,而IEFirefox打开一个空白的新选项卡。

我的问题是,是不是javascript:void(0)应该防止任何点击事件从链接发射,即使它的目标是新的选项卡/窗口?为什么target="_blank"会覆盖它?

还有什么是最好的方法,如果我是,让我们说,用一些后端语言填充href属性,我更喜欢target="_blank"硬编码旁边的href属性?

<a href=# onclick="return false;">I look like a link!</a>

一直用这个

编辑:对于您关于void(0)的问题,onclick应该具有比href属性更高的优先级,因为它提供了更丰富的功能,并且具有实际阻止href操作的能力-因此我的return false。只有当onclick事件存在时,href才会出现在机器人和旧浏览器中。

另外,是否使用格式奇怪的url执行常规导航由浏览器自行决定。如果链接以散列开头,它应该直接跳转到书签。但是当它为空或包含其他协议时,这完全取决于浏览器是否决定尝试访问新文档。输入javascript:伪协议传统上用于bookmarklet,它被期望与当前页面一起工作,所以任何javascript:不做document.write()或其他破坏性修改应该使页面不重新加载。

EDIT2:我不确定你在href中的后端语言是什么意思,但考虑html有效的data-属性,如果它在逻辑上不属于href属性,可以给你的代码一些工作。

我用一个简单的技巧解决了这个问题。它可能有用。

我已经根据链接动态地删除了target属性。例如,如果链接未定义或为空或javascript:void(0),那么我们将使用下面的代码删除目标属性。

如果链接是正确的,我们将为该超链接添加目标属性("第二个If条件"将执行此操作,因为在我的页面中链接是动态的)。

我已经复制了示例html文件(Test.html)。如果我们想要在页面的onload上删除属性,复制此文件中的脚本代码并将其粘贴到所需文件的末尾。

如果我们想把这个应用于动态链接,我们必须把这个代码放在一个函数中,我们可以在需要的时候调用它。

此代码将适用于该页中的所有超链接。我们可以通过使用class或任何其他属性将其限制为特定的链接集。

Test.html
---------
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<a href="javascript:void(0);" target="_blank">Link1</a>
<a href="javascript:void(0);" target="_blank">Link2</a>
<a href="www.url1.com" target="_blank">Link3</a>
<a href="www.url2.com" target="_blank">Link4</a>
<script>
$("a").each(function() {
if(typeof(this.href) == 'undefined' || this.href == 'javascript:void(0);') {
    $(this).attr('href', 'javascript:void(0);');
    $(this).removeAttr('target');
}
if(typeof(this.href) != 'undefined' && this.href != 'javascript:void(0);') {
    var s_link = this.href;
    if (s_link.indexOf('http://') === -1 && s_link.indexOf('https://') === -1) {
        s_link = 'https://' + s_link;
    }   
    $(this).attr('href', s_link);
    $(this).attr('target', '_blank');
}
});
</script>