首先,我没有真正的问题。我只是出于好奇而问这个。
在同一个链接中使用javascript:void(0)
和target="_blank"
时,我不小心遇到了一种奇怪的行为。
<a href="javascript:void(0);" target="_blank" /> Link </a>
我发现Chrome
正常处理此问题而在您点击该链接时没有做任何事情,而IE
和Firefox
会打开一个空白的新标签。
我的问题是,javascript:void(0)
是否应该阻止来自链接的任何点击事件,即使它是针对新标签/窗口的?为什么target="_blank"
会覆盖它?
另外,如果我是最好的方法,比方说,用href
属性填充target="_blank"
属性,我更喜欢在href
属性旁边硬编码{{1}}?
答案 0 :(得分:1)
<a href=# onclick="return false;">I look like a link!</a>
总是使用它。
编辑:关于void(0)的问题,onclick应该具有比href属性更高的优先级,因为它提供了更丰富的功能,并且具有实际阻止href操作的能力 - 因此我的{{1} }。如果存在onclick事件,则href仅适用于机器人和旧浏览器。
此外,是否使用奇怪形成的URL执行常规导航由浏览器决定。如果链接以哈希开头,它应该只是跳转到书签。但是当它为空或包含其他协议时,如果它决定尝试访问新文档,则全部取决于浏览器。输入return false
伪协议传统上用于预期与当前页面一起使用的bookmarklet,因此任何不javascript:
或其他破坏性修改的javascript:
应该< / em>让页面重新加载。
EDIT2:我不确定href中后端语言的含义,但考虑到HTML有效的document.write()
属性,如果它在逻辑上不属于href属性,则可以使用代码。
答案 1 :(得分:0)
我用简单的技巧解决了这个问题。它可能有用。
我已根据链接动态删除了目标属性。即如果链接未定义或为空或javascript:void(0),那么我们将使用下面的代码删除目标属性。
如果链接是正确的,我们将添加该超链接的目标属性(&#34;如果条件&#34;则会这样做,因为在我的页面链接是动态的)。
我复制了示例html文件(Test.html)。 如果我们要删除页面onload上的属性,请复制此文件中的脚本代码并将其粘贴到所需文件的末尾。
如果我们想将此应用于动态链接,我们必须将此代码放在一个函数中,我们可以在需要时调用它。
此代码适用于该页面中的所有超链接。我们可以使用类或任何其他属性将此限制为特定的链接集。
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>